Î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

  • mulțumesc. Dar cum aș putea să trec câteva nume de fișiere pe linia de comandă?
  • Bun punct. Vezi răspunsul meu actualizat. Puteți pune câte doriți înainte de primul test. De exemplu: find * -maxdepth 0 -name "file1". * va afișa fiecare fișier din directorul curent de pe linia de comandă.
  • @Ramesh Answer a fost actualizat din nou cu, sper, explicații și exemple mai bune.
  • mulțumesc din nou. Mi-am actualizat întrebarea cu mai multe detalii din ultima dvs. actualizare.
  • @Ramesh nu o găsesc documentată, dar văd același comportament pe care îl faceți: find se uită la fiecare cale de pe linia de comandă și raportează potrivirile pentru fiecare, chiar dacă acestea sunt duplicate.

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *