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

  • tack. Men hur kunde jag skicka några filnamn på kommandoraden?
  • Bra poäng. Se mitt uppdaterade svar. Du kan sätta så många du vill före det första testet. Till exempel: find * -maxdepth 0 -name "file1". * listar alla filer i den aktuella katalogen på kommandoraden.
  • @Ramesh Svar uppdaterat igen, hoppas jag, bättre förklaring och exempel.
  • tack igen. Jag uppdaterade min fråga med mer information från din senaste uppdatering.
  • @Ramesh Jag kan inte hitta den dokumenterad men jag ser samma beteende som du gör: find tittar på varje sökväg på kommandoraden och rapporterar matchningar på var och en även om de är dubbletter.

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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *