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
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.
find * -maxdepth 0 -name "file1"
. Az*
felsorolja az aktuális könyvtár minden fájlját a parancssoron.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.