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

  • takk. Men hvordan kunne jeg sende noen filnavn på kommandolinjen?
  • Bra poeng. Se det oppdaterte svaret mitt. Du kan legge så mange du vil før den første testen. For eksempel: find * -maxdepth 0 -name "file1". * vil vise hver fil i den nåværende katalogen på kommandolinjen.
  • @Ramesh Svar oppdatert igjen, håper jeg, bedre forklaring og eksempler.
  • takk igjen. Jeg oppdaterte spørsmålet mitt med mer informasjon fra den siste oppdateringen.
  • @Ramesh Jeg finner det ikke dokumentert, men jeg ser den samme oppførselen du gjør: find ser på hver sti på kommandolinjen og rapporterer treff på hver enkelt, selv om de er duplikater.

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *