Próbuję zrozumieć, jak używać opcji find -maxdepth 0
.
Mam poniższą strukturę katalogów.
--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1
Teraz wykonuję polecenie find
jak poniżej.
find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1"
Bez żadnego z powyższych find
poleceń, file1 zostanie zwrócony.
Ze strony podręcznika podręcznika find
, widzę poniższe informacje.
-maxdepth 0 oznacza stosowanie testów i działań tylko do argumentów wiersza poleceń.
Szukałem przykładów z opcją -maxdepth 0
i nie mogłem znaleźć żadnego odpowiedniego przykładu.
Mój find
to,
find --version find (GNU findutils) 4.4.2
Czy ktoś może mi podać kilka wskazówek, w jakich przypadkach opcja -maxdepth 0
byłaby przydatna ?
EDYTUJ
Kiedy wykonuję poniższe polecenie, otrzymuję file1 pojawia się dwukrotnie. Czy to ma działać w ten sposób?
find . file1 -maxdepth 1 -name "file1" ./file1 file1
Odpowiedź
Załóżmy, że mamy file1
w bieżącym katalogu. Następnie :
$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1
Spójrzmy teraz na treść dokumentacji:
-maxdepth 0 oznacza onl y zastosuj testy i akcje do argumentów wiersza poleceń.
W moim pierwszym przykładzie powyżej, tylko katalog .
znajduje się w wierszu poleceń. Ponieważ .
nie ma nazwy file1
, nic nie jest wyświetlane w wynikach. W moim drugim przykładzie powyżej zarówno .
, jak i file1
są wymienione w wierszu poleceń, a ponieważ file1
pasuje do -name "file1"
, zostało zwrócone w wyniku
Innymi słowy, -maxdepth 0
oznacza do nie przeszukuj katalogi lub podkatalogi. Zamiast tego szukaj tylko pasującego pliku spośród tych, które zostały wyraźnie wymienione w wierszu poleceń.
W twoich przykładach w wierszu poleceń były wymienione tylko katalogi i żaden z nich nie został nazwany file1
. Dlatego nie ma wyjścia.
Ogólnie rzecz biorąc, wiele plików i katalogów można nazwać w wierszu poleceń. Na przykład tutaj próbujemy wykonać polecenie find
z 11 plikami i katalogami w wierszu poleceń:
$ ls d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 $ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1" file1
Nakładanie się ścieżki
Rozważ:
$ find . file1 -maxdepth 0 -iname file1 file1 $ find . file1 file1 -maxdepth 0 -iname file1 file1 file1 $ find . file1 file1 -maxdepth 1 -iname file1 ./file1 file1 file1
Najwyraźniej, jak wskazuje Ramesh, find
nastąpi każdą ścieżkę określoną w wierszu poleceń i szukaj dopasowań, nawet jeśli ścieżki prowadzą do tego samego pliku, jak w . file
lub nawet jeśli ścieżki są dokładnymi duplikatami, jak w .
Komentarze
Odpowiedz
Jeśli chcesz nierekurencyjnie znaleźć pliki (nie katalogi) w katalogu, użyj:
find . -maxdepth 1 -type f -name "file1" # ./file1
-maxdepth 0
nie będzie wyszukiwać . Będzie próbował dopasować tylko te nazwy plików / katalogów, które podałeś jako argumenty w find
. Na przykład. w powyższej instrukcji, używając wartości 0
, spróbuje dopasować file1
do .
który nie pasuje. Przekazanie *
zamiast .
spowodowałoby, że bash zastąpiłby *
listą plików w bieżącym katalogu co zwróci dopasowanie.
find * -maxdepth 0 -name "file1"
.*
wyświetli listę wszystkich plików w bieżącym katalogu w wierszu poleceń.find
patrzy na każdy ścieżka w wierszu poleceń i raporty pasują do każdego z nich, nawet jeśli są duplikatami.