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
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.
find * -maxdepth 0 -name "file1"
. De*
zal elk bestand in de huidige map op de opdrachtregel weergeven.find
kijkt naar elk pad op de opdrachtregel en rapporteert overeenkomsten op elk, zelfs als het duplicaten zijn.