Ik probeer te begrijpen hoe de find -maxdepth 0 optie te gebruiken.

Ik heb de onderstaande directorystructuur.

--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1 

Nu voer ik mijn find commando uit zoals hieronder.

find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1" 

Met geen van de bovenstaande find commandos, file1 wordt geretourneerd.

Van de man-pagina van find zie ik de onderstaande informatie.

-maxdepth 0 betekent alleen de tests en acties toepassen op de opdrachtregelargumenten.

Ik zocht naar enkele voorbeelden met de optie -maxdepth 0 en kon “geen goed voorbeeld vinden.

Mijn find versie is,

find --version find (GNU findutils) 4.4.2 

Kan iemand me alsjeblieft wat tips geven over welke gevallen -maxdepth 0 optie nuttig zou zijn ?

EDIT

Wanneer ik de onderstaande opdracht uitvoer, krijg ik de file1 wordt twee keer vermeld. Is dit bedoeld om op deze manier te werken?

find . file1 -maxdepth 1 -name "file1" ./file1 file1 

Answer

Laten we aannemen dat we file1 in de huidige directory hebben. :

$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1 

Laten we nu eens kijken wat de documentatie zegt:

-maxdiepte 0 betekent alleen y pas de tests en acties toe op de opdrachtregelargumenten.

In mijn eerste voorbeeld hierboven, alleen de directory . wordt vermeld op de opdrachtregel. Aangezien . niet de naam file1 heeft, wordt er niets vermeld in de uitvoer. In mijn tweede voorbeeld hierboven staan zowel . als file1 vermeld op de opdrachtregel en, omdat file1 komt overeen met -name "file1", het werd geretourneerd in de uitvoer

Met andere woorden, -maxdepth 0 betekent do niet zoek in mappen of submappen. Zoek in plaats daarvan alleen naar een overeenkomend bestand tussen de bestanden die expliciet op de opdrachtregel worden vermeld.

In uw voorbeelden stonden alleen mappen op de opdrachtregel en geen van hen heette file1. Dus geen uitvoer.

In het algemeen kunnen veel bestanden en mappen een naam krijgen op de opdrachtregel. Hier proberen we bijvoorbeeld een find commando met 11 bestanden en mappen op de commandoregel:

$ 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 

Overlappend paden

Overweeg:

$ 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 

Blijkbaar, zoals Ramesh opmerkt, find zal volgen elk pad gespecificeerd op de opdrachtregel en zoek naar overeenkomsten, zelfs als de paden naar hetzelfde bestand leiden, zoals in . file of zelfs als de paden exacte duplicaten zijn, zoals in file1 file1.

Reacties

  • bedankt. Maar hoe kan ik enkele bestandsnamen op de opdrachtregel doorgeven?
  • Goed punt. Zie mijn bijgewerkte antwoord. U kunt er zoveel plaatsen als u wilt voor de eerste test. Bijvoorbeeld: find * -maxdepth 0 -name "file1". De * zal elk bestand in de huidige map op de opdrachtregel weergeven.
  • @Ramesh Antwoord opnieuw bijgewerkt met, hopelijk, betere uitleg en voorbeelden.
  • nogmaals bedankt. Ik heb mijn vraag bijgewerkt met meer details van je laatste update.
  • @Ramesh Ik kan het niet gedocumenteerd vinden, maar ik zie hetzelfde gedrag als jij: find kijkt naar elk pad op de opdrachtregel en rapporteert overeenkomsten op elk, zelfs als het duplicaten zijn.

Answer

Als u bestanden (geen mappen) in een map niet-recursief willen vinden, gebruik:

 find . -maxdepth 1 -type f -name "file1" # ./file1  

-maxdepth 0 zal niet zoeken . Het zal alleen proberen te matchen tussen de bestands- / mapnamen die je hebt opgegeven als argumenten in find. Bijv. in de bovenstaande instructie, met behulp van een waarde 0, zou proberen om file1 te matchen met . wat niet overeenkomt. Door * in plaats van . door te geven, zou bash * vervangen door een lijst met bestanden in de huidige map wat een match zou opleveren.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *