find -maxdepth 0 nu-mi returnează niciun rezultat (Unix, Găsiți)

Ramesh a intrebat.
a intrebat.

Î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

2 răspunsuri
John1024

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.

Comentarii

  • mulțumiri. Dar cum aș putea să trec câteva nume de fișiere pe linia de comandă? –  > Por Ramesh.
  • Bun punct. Vedeți răspunsul meu actualizat. Puteți pune câte doriți înainte de primul test. De exemplu: find * -maxdepth 0 -name "file1". * va lista fiecare fișier din directorul curent pe linia de comandă. –  > Por John1024.
  • @Ramesh Răspuns actualizat din nou cu, sper, explicații și exemple mai bune. –  > Por John1024.
  • mulțumesc din nou. Mi-am actualizat întrebarea cu mai multe detalii din ultima ta actualizare. –  > Por Ramesh.
  • @Ramesh Nu găsesc documentat, dar văd același comportament ca și dumneavoastră: 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.
Marinos An

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.