Încerc să înțeleg cum să folosesc find -maxdepth 0
opțiunea.
Am structura de directoare de mai jos.
--> file1
--> parent
--> child1
--> file1
--> file2
--> child2
--> file1
--> file2
--> file1
Acum, îmi execut find
comanda de mai jos.
find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"
Cu niciuna dintre opțiunile de mai sus find
comenzi, fișier1 este returnat.
Din pagina de manual a find
, , văd informațiile de mai jos.
-maxdepth 0 înseamnă că testele și acțiunile se aplică numai la argumentele din linia de comandă.
Am căutat câteva exemple cu -maxdepth 0
opțiune și nu am găsit niciun exemplu adecvat.
Site-ul meu find
versiune este,
find --version
find (GNU findutils) 4.4.2
Poate cineva să-mi dea câteva indicații despre cazurile în care -maxdepth 0
option ar fi utilă?
EDITARE
Atunci când execut comanda de mai jos, obțin fișier1 fiind listat de două ori. Este menit să funcționeze în acest mod?
find . file1 -maxdepth 1 -name "file1"
./file1
file1
Să presupunem că avem file1
în directorul curent. Apoi:
$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1
Acum, să ne uităm la ceea ce spune documentația:
-maxdepth 0 înseamnă că testele și acțiunile se aplică numai la argumentele din linia de comandă.
În primul meu exemplu de mai sus, doar directorul .
este listat pe linia de comandă. Deoarece .
nu are numele file1
, , nu este listat nimic în ieșire. În cel de-al doilea exemplu de mai sus, ambele .
și file1
sunt listate pe linia de comandă și, deoarece file1
se potrivește cu -name "file1"
, , a fost returnat în ieșire
Cu alte cuvinte, -maxdepth 0
înseamnă că face nu caută în directoare sau subdirectoare. În schimb, caută doar un fișier corespunzător dintre cele enumerate în mod explicit în linia de comandă.
În exemplele dvs., în linia de comandă au fost listate numai directoare și niciuna dintre ele nu se numea file1
. Prin urmare, nu există niciun rezultat.
În general, multe fișiere și directoare pot fi denumite în linia de comandă. De exemplu, aici încercăm un find
comandă 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
Căi suprapuse
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, find
va urmări fiecare cale specificată pe linia de comandă și va căuta corespondențe chiar dacă căile duc la același fișier, ca în cazul lui . file
sau chiar dacă căile sunt duplicate exacte, ca în file1 file1
.
Dacă doriți să găsiți în mod non-recursiv fișiere (nu directoare) în interiorul unui director, utilizați:
find . -maxdepth 1 -type f -name "file1"
# ./file1
-maxdepth 0
nu va căuta. Acesta va încerca doar să se potrivească între numele de fișiere/directoare pe care le-ați furnizat ca argumente în find
. De exemplu, în declarația de mai sus, folosind o valoare 0
, , va încerca să se potrivească cu file1
la .
care nu se potrivește. Transmiterea *
în loc de .
ar face ca bash să înlocuiască *
cu o listă de fișiere din directorul curent, care ar returna o potrivire.
find * -maxdepth 0 -name "file1"
.*
va lista fiecare fișier din directorul curent pe linia de comandă. – > Por John1024.find
se uită la fiecare cale de acces de pe linia de comandă și raportează potriviri pe fiecare dintre ele, chiar dacă sunt duplicate. – > Por John1024.