Jag försöker förstå hur jag använder alternativet find -maxdepth 0
.
Jag har nedanstående katalogstruktur.
--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1
Nu kör jag mitt find
-kommando enligt nedan.
find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1"
Med inget av ovanstående find
kommandon file1 returneras.
Från mansidan för find
ser jag informationen nedan.
-maxdepth 0 betyder bara att test och åtgärder tillämpas på kommandoradsargumenten.
Jag sökte efter några exempel med -maxdepth 0
-alternativet och kunde inte hitta något ordentligt exempel.
Mitt find
version är
find --version find (GNU findutils) 4.4.2
Kan någon snälla ge mig några tips om vilka fall -maxdepth 0
alternativet skulle vara användbart ?
EDIT
När jag utför kommandot nedan får jag file1 listas två gånger. Är detta avsett att fungera så här?
find . file1 -maxdepth 1 -name "file1" ./file1 file1
Svar
Låt oss anta att vi har file1
i den aktuella katalogen. :
$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1
Låt oss nu titta på vad dokumentationen säger:
-maxdjup 0 betyder onl y tillämpa testerna och åtgärderna på kommandoradsargumenten.
I mitt första exempel ovan är endast katalogen .
listas på kommandoraden. Eftersom .
inte har namnet file1
listas ingenting i utgången. I mitt andra exempel ovan listas både .
och file1
på kommandoraden och eftersom file1
matchar -name "file1"
, den returnerades i utdata
Med andra ord betyder -maxdepth 0
gör inte sökkataloger eller underkataloger. Sök istället bara efter en matchande fil bland de som är uttryckligen listade på kommandoraden.
I dina exempel listades bara kataloger på kommandoraden och ingen av dem fick namnet file1
. Därför ingen utdata.
I allmänhet kan många filer och kataloger namnges på kommandoraden. Här försöker vi till exempel ett find
-kommando med 11 filer och kataloger på kommandoraden:
$ 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
Överlappande sökvägar
Överväg:
$ 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
Som Ramesh påpekar, find
uppenbarligen varje sökväg som anges på kommandoraden och leta efter matchningar även om sökvägarna leder till samma fil, som i . file
eller till och med om sökvägarna är exakta dubbletter, som i file1 file1
.
Kommentarer
Svar
Om du vill hitta icke-rekursivt filer (inte kataloger) i en kataloganvändning:
find . -maxdepth 1 -type f -name "file1" # ./file1
-maxdepth 0
söker inte . Det försöker bara matcha bland fil- / katalognamnen som du har angett som argument i find
. T.ex. i ovanstående uttalande, med ett värde 0
, skulle försöka matcha file1
till .
som inte matchar. Om du skickar *
istället för .
skulle bash ersätta *
med en lista med filer i aktuell dir som skulle returnera en matchning.
find * -maxdepth 0 -name "file1"
.*
listar alla filer i den aktuella katalogen på kommandoraden.find
tittar på varje sökväg på kommandoraden och rapporterar matchningar på var och en även om de är dubbletter.