Încerc să înțeleg cum să folosesc opțiunea find -maxdepth 0
.
Am structura de directoare de mai jos.
--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1
Acum, îmi execut comanda find
după cum urmează.
find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1"
Fără nici una dintre comenzile find
de mai sus, file1 este returnat.
Din pagina de manual a find
, văd informațiile de mai jos.
-maxdepth 0 înseamnă să aplicați doar testele și acțiunile la argumentele din linia de comandă.
Am căutat câteva exemple cu opțiunea -maxdepth 0
și nu am putut găsi niciun exemplu adecvat.
find
este,
find --version find (GNU findutils) 4.4.2
Poate cineva, vă rog, să-mi ofere câteva indicații cu privire la care opțiunea -maxdepth 0
ar fi utilă ?
EDIT
Când execut comanda de mai jos, primesc file1 fiind listat de două ori. Este intenționat să funcționeze astfel?
find . file1 -maxdepth 1 -name "file1" ./file1 file1
Răspuns
Să presupunem că avem file1
în directorul curent. Apoi :
$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1
Acum, să vedem ce precizează documentația:
-maxdepth 0 înseamnă onl y aplicați testele și acțiunile la argumentele liniei de comandă.
În primul meu exemplu de mai sus, numai directorul .
este listat pe linia de comandă. Deoarece .
nu are numele file1
, nimic nu este listat în ieșire. În al doilea exemplu de mai sus, atât .
, cât și file1
sunt listate pe linia de comandă și, deoarece file1
coincide cu -name "file1"
, a fost returnat în ieșire
Cu alte cuvinte, -maxdepth 0
înseamnă să faci nu căutare directoare sau subdirectoare. În schimb, căutați doar un fișier care se potrivește dintre cele listate în mod explicit pe linia de comandă.
În exemplele dvs., numai directoare au fost listate pe linia de comandă și niciunul dintre ele nu a fost numit file1
. Prin urmare, nicio ieșire.
În general, multe linii de fișiere și directoare pot fi denumite pe linia de comandă. De exemplu, aici încercăm o comandă find
cu 11 fișiere și directoare pe linia de comandă:
$ 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
Suprapunere căi
Luați în considerare:
$ 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
Aparent, după cum subliniază Ramesh, va urma find
fiecare cale specificată pe linia de comandă și caută potriviri chiar dacă căile duc la același fișier, ca în . file
sau chiar dacă căile sunt duplicate exacte, ca în file1 file1
.
Comentarii
Răspunde
Dacă doriți să găsiți fișiere (nu directoare) non-recursiv într-un director de utilizare:
find . -maxdepth 1 -type f -name "file1" # ./file1
-maxdepth 0
nu va căuta . Acesta va încerca să se potrivească doar între numele fișierelor / directorelor pe care le-ați furnizat ca argumente în find
. De exemplu. în declarația de mai sus, folosind o valoare 0
, s-ar încerca să se potrivească file1
cu .
care nu se potrivește. Trecerea *
în loc de .
ar face ca bash să înlocuiască *
cu lista de fișiere din dir actual care ar returna un meci.
find * -maxdepth 0 -name "file1"
.*
va afișa fiecare fișier din directorul curent de pe linia de comandă.find
se uită la fiecare cale de pe linia de comandă și raportează potrivirile pentru fiecare, chiar dacă acestea sunt duplicate.