Jeg prøver å forstå hvordan jeg bruker alternativet find -maxdepth 0
.
Jeg har nedenstående katalogstruktur.
--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1
Nå utfører jeg find
-kommandoen som nedenfor.
find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1"
Med ingen av de ovennevnte find
kommandoer, file1 blir returnert.
Fra mannssiden til find
ser jeg informasjonen nedenfor.
-maxdepth 0 betyr bare å bruke testene og handlingene på kommandolinjeargumentene.
Jeg søkte på noen eksempler med -maxdepth 0
-alternativet og kunne ikke finne noe riktig eksempel.
Min find
versjon er,
find --version find (GNU findutils) 4.4.2
Kan noen gi meg noen tips om hvilke tilfeller -maxdepth 0
alternativet vil være nyttig ?
EDIT
Når jeg utfører kommandoen nedenfor, får jeg file1 blir oppført to ganger. Er dette ment å fungere på denne måten?
find . file1 -maxdepth 1 -name "file1" ./file1 file1
Svar
La oss anta at vi har file1
i den nåværende katalogen. :
$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1
La oss nå se på hva dokumentasjonen sier:
-maksimal dybde 0 betyr kun y bruker testene og handlingene på kommandolinjeargumentene.
I mitt første eksempel ovenfor er bare katalogen .
er oppført på kommandolinjen. Siden .
ikke har navnet file1
, er ingenting oppført i utgangen. I mitt andre eksempel ovenfor er både .
og file1
oppført på kommandolinjen, og fordi file1
samsvarer med -name "file1"
, den ble returnert i utdata
Med andre ord betyr -maxdepth 0
gjør ikke søkekataloger eller underkataloger. I stedet bare se etter en samsvarende fil blant de som er eksplisitt oppført på kommandolinjen.
I eksemplene dine ble bare kataloger oppført på kommandolinjen, og ingen av dem fikk navnet file1
. Derfor ingen utdata.
Generelt sett kan mange filer og kataloger navngis på kommandolinjen. For eksempel, her prøver vi en find
-kommando med 11 filer og kataloger 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
Tenk på:
$ 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
Tilsynelatende, som Ramesh påpeker, vil find
følge hver bane spesifisert på kommandolinjen og se etter treff selv om stiene fører til den samme filen, som i . file
eller til og med om stiene er eksakte duplikater, som i file1 file1
.
Kommentarer
Svar
Hvis du vil ikke-rekursivt finne filer (ikke kataloger) i en katalogbruk:
find . -maxdepth 1 -type f -name "file1" # ./file1
-maxdepth 0
vil ikke søke . Den vil bare prøve å matche mellom fil- / katalognavnene du har oppgitt som argumenter i find
. F.eks. i utsagnet ovenfor, med en verdi 0
, ville vi prøve å matche file1
til .
som ikke stemmer overens. Hvis du sender *
i stedet for .
, vil bash erstatte *
med en liste over filer i gjeldende dir. som ville returnere en kamp.
find * -maxdepth 0 -name "file1"
.*
vil vise hver fil i den nåværende katalogen på kommandolinjen.find
ser på hver sti på kommandolinjen og rapporterer treff på hver enkelt, selv om de er duplikater.