Megpróbálom megérteni a find -maxdepth 0 opció használatát.

Az alábbi könyvtárstruktúrám van.

--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1 

Most végrehajtom a find parancsomat az alábbiak szerint.

find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1" 

A fenti find parancsok egyikével sem, A file1 visszatér.

A find man oldaláról az alábbi információkat látom.

-maxdepth 0 azt jelenti, hogy a teszteket és műveleteket csak a parancssori argumentumokra kell alkalmazni.

Kerestem néhány példát a -maxdepth 0 opcióval, és nem találtam megfelelő példát.

Saját find version is,

find --version find (GNU findutils) 4.4.2 

Kérem, tudjon valaki adni néhány mutatót, amelyekben a -maxdepth 0 opció hasznos lehet ?

SZERKESZTÉS

Amikor végrehajtom az alábbi parancsot, megkapom a file1 kétszer szerepel a listán. Ez így működik?

find . file1 -maxdepth 1 -name "file1" ./file1 file1 

Válasz

Tegyük fel, hogy az aktuális könyvtárban van file1. :

$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1 

Most nézzük meg, mit állít a dokumentáció:

-maxdepth 0 jelentése onl y alkalmazza a teszteket és a műveleteket a parancssori argumentumokra.

A fenti első példámban csak az . szerepel a parancssorban. Mivel a . nem rendelkezik a file1 névvel, a kimenetben semmi nem szerepel. A fenti második példámban a . és a file1 egyaránt szerepel a parancssorban, és mivel file1 megegyezik a -name "file1" szóval, a kimenetben vissza lett adva

Más szavakkal, a -maxdepth 0 jelentése: nem keresési könyvtárakat vagy alkönyvtárakat. Ehelyett csak keressen egy megfelelő fájlt a parancssorban kifejezetten felsoroltak között.

A példáiban csak a könyvtárak voltak felsorolva a parancssorban, és egyikük sem volt elnevezve file1. Ezért nincs kimenet.

Általában sok fájl és könyvtár nevezhető meg a parancssorban. Például itt megpróbálunk egy find parancsot, amely 11 fájlt és könyvtárat tartalmaz a parancssorban:

$ 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 

Átfedés utak

Fontolja meg:

$ 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 

Nyilvánvalóan, amint Ramesh rámutat, find követni fogja a parancssorban megadott minden útvonalat, és keressen egyezéseket, még akkor is, ha az elérési utak ugyanahhoz a fájlhoz vezetnek, például a . file fájlban, vagy akkor is, ha az elérési utak pontos ismétlődések, például a file1 file1.

Megjegyzések

  • köszönöm. De hogyan adhatnék át néhány fájlnevet a parancssorba?
  • Jó pont. Lásd a frissített válaszomat. Az első teszt előtt annyit tehet, amennyit csak akar. Például: find * -maxdepth 0 -name "file1". Az * felsorolja az aktuális könyvtár minden fájlját a parancssoron.
  • @Ramesh Answer ismét frissítve, remélem, jobb magyarázattal és példákkal.
  • még egyszer köszönöm. Frissítettem a kérdésemet a legújabb frissítésed további részleteivel.
  • @Ramesh nem találom dokumentáltnak, de ugyanazt a viselkedést látom, mint te: find mindegyiket megnézi elérési útja a parancssorban, és mindegyikről egyezést jelent, még akkor is, ha azok ismétlődnek.

Válasz

Ha nem rekurzív módon szeretne fájlokat (nem könyvtárakat) találni egy könyvtárban:

 find . -maxdepth 1 -type f -name "file1" # ./file1  

-maxdepth 0 nem fog keresni . Csak a find fájlban argumentumként megadott fájl- / könyvtárnevek között próbál meg egyeztetni. Például. a fenti utasításban egy 0 érték használatával megpróbálná a file1 és . ami nem egyezik. Ha az * t átadja a . helyett, akkor a bash az * fájlt az aktuális dir amely meccset adna vissza.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük