Jeg prøver at forstå, hvordan man bruger find -maxdepth 0
mulighed.
Jeg har nedenstående katalogstruktur.
--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1
Nu udfører jeg min find
-kommando som nedenfor.
find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1"
Med ingen af ovenstående find
kommandoer, file1 returneres.
Fra mandsiden til find
ser jeg nedenstående oplysninger.
-maxdepth 0 betyder kun at anvende testene og handlingerne på kommandolinjeargumenterne.
Jeg søgte efter nogle eksempler med -maxdepth 0
mulighed og kunne ikke finde noget passende eksempel.
Min find
version er,
find --version find (GNU findutils) 4.4.2
Kan nogen venligst give mig nogle henvisninger til hvilke sager -maxdepth 0
mulighed ville være nyttig ?
REDIGER
Når jeg udfører nedenstående kommando, får jeg file1 bliver angivet to gange. Er dette beregnet til at fungere på denne måde?
find . file1 -maxdepth 1 -name "file1" ./file1 file1
Svar
Lad os antage, at vi har file1
i den aktuelle bibliotek. Derefter :
$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1
Lad os nu se på, hvad dokumentationen siger:
-maksimal dybde 0 betyder kun y anvender testene og handlingerne på kommandolinjeargumenterne.
I mit første eksempel ovenfor er kun biblioteket .
er angivet på kommandolinjen. Da .
ikke har navnet file1
, er der intet angivet i output. I mit andet eksempel ovenfor er både .
og file1
angivet på kommandolinjen, og fordi file1
matcher -name "file1"
, det blev returneret i output
Med andre ord betyder -maxdepth 0
gør ikke søgningskataloger eller underkataloger. I stedet skal du kun kigge efter en matchende fil blandt dem, der eksplicit er angivet på kommandolinjen.
I dine eksempler blev der kun vist mapper på kommandolinjen, og ingen af dem fik navnet file1
. Derfor er der ingen output.
Generelt kan mange filer og mapper navngives på kommandolinjen. For eksempel prøver vi her en find
kommando med 11 filer og mapper på kommandolinjen:
$ 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
Overlappende stier
Overvej:
$ 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åpeger tilsyneladende vil find
følge hver sti, der er angivet på kommandolinjen, og se efter matches, selvom stierne fører til den samme fil, som i . file
eller endda hvis stierne er nøjagtige duplikater, som i file1 file1
.
Kommentarer
Svar
Hvis du ønsker ikke-rekursivt at finde filer (ikke mapper) i et biblioteksbrug:
find . -maxdepth 1 -type f -name "file1" # ./file1
-maxdepth 0
søger ikke . Det forsøger kun at matche blandt de fil- / katalognavne, du har angivet som argumenter i find
. For eksempel. i ovenstående udsagn, ved hjælp af en værdi 0
, ville forsøge at matche file1
til .
som ikke stemmer overens. Hvis du sender *
i stedet for .
, ville bash erstatte *
med en liste over filer i den aktuelle dir som ville returnere en kamp.
find * -maxdepth 0 -name "file1"
.*
viser hver fil i den aktuelle mappe på kommandolinjen.find
ser på hver sti på kommandolinjen og rapporter matcher for hver enkelt, selvom de er duplikater.