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

  • tak. Men hvordan kunne jeg videregive nogle filnavne på kommandolinjen?
  • Godt punkt. Se mit opdaterede svar. Du kan sætte så mange som du vil inden den første test. For eksempel: find * -maxdepth 0 -name "file1". * viser hver fil i den aktuelle mappe på kommandolinjen.
  • @Ramesh Svar opdateret igen med håb, bedre forklaring og eksempler.
  • tak igen. Jeg opdaterede mit spørgsmål med flere detaljer fra din seneste opdatering.
  • @Ramesh Jeg kan ikke finde det dokumenteret, men jeg kan se den samme adfærd som du gør: find ser på hver sti på kommandolinjen og rapporter matcher for hver enkelt, selvom de er duplikater.

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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *