Yritän ymmärtää, miten find -maxdepth 0 -vaihtoehtoa käytetään.

Minulla on alla oleva hakemistorakenne.

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

Suoritan nyt find -komennon alla esitetyllä tavalla.

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

Mikään yllä olevista find -komennoista tiedosto1 palautetaan.

Näen alla olevat tiedot find -sivulta.

-maxdepth 0 tarkoittaa, että testejä ja toimintoja sovelletaan vain komentoriviargumentteihin.

Etsin joitain esimerkkejä vaihtoehdolla -maxdepth 0 ja en löytänyt oikeaa esimerkkiä.

Oma find version is,

find --version find (GNU findutils) 4.4.2 

Voiko joku antaa minulle viitteitä, joissa tapauksissa -maxdepth 0 -vaihtoehto olisi hyödyllinen ?

MUOKKAA

Kun suoritan alla olevan komennon, saan file1 listataan kahdesti. Onko tämä tarkoitus toimia tällä tavalla?

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

vastaus

Oletetaan, että nykyisessä hakemistossa on file1. :

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

Katsotaanpa nyt mitä dokumentaatiossa sanotaan:

-maxdepth 0 tarkoittaa onl y käytä testejä ja toimintoja komentoriviargumentteihin.

Ensimmäisessä yllä olevassa esimerkissä vain hakemisto . on lueteltu komentorivillä. Koska . ei ole nimeä file1, mitään ei ole luettelossa lähdössä. Toisessa yllä olevassa esimerkissä sekä . että file1 on lueteltu komentorivillä ja koska file1 vastaa -name "file1", se palautettiin tulosteessa

Toisin sanoen -maxdepth 0 tarkoittaa do ei hakuhakemistoja tai alihakemistoja. Sen sijaan, että etsit vain vastaavaa tiedostoa komentorivillä nimenomaisesti lueteltujen tiedostojen joukosta.

Esimerkeissä vain hakemistot lueteltiin komentorivillä, eikä yksikään niistä nimetty file1. Ei siis lähtöä.

Yleensä komentorivillä voidaan nimetä monia tiedostoja ja hakemistoja. Esimerkiksi tässä kokeillaan komentoa find, jossa on 11 tiedostoa ja hakemistoa komentorivillä:

$ 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 

Päällekkäin polut

Harkitse:

$ 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 

Kuten Ramesh huomauttaa, ilmeisesti find seuraa jokainen komentorivillä määritetty polku ja etsi vastaavuuksia, vaikka polut johtavat samaan tiedostoon, kuten kohdassa . file, tai vaikka polut olisivat tarkkoja kopioita, kuten kohdassa file1 file1.

kommentit

  • kiitos. Mutta kuinka voisin välittää joitain tiedostojen nimiä komentoriville?
  • Hyvä asia. Katso päivitetty vastaukseni. Voit laittaa niin monta kuin haluat ennen ensimmäistä testiä. Esimerkiksi: find * -maxdepth 0 -name "file1". * luetteloi kaikki nykyisen hakemiston tiedostot komentorivillä.
  • @Ramesh Answer päivitettiin uudestaan, toivottavasti paremmalla selityksellä ja esimerkeillä.
  • kiitos vielä kerran. Päivitin kysymykseni viimeisimmän päivityksen yksityiskohdilla.
  • @Ramesh En löydä sitä dokumentoituna, mutta näen saman käyttäytymisen kuin sinä: find tarkastelee jokaista polku komentorivillä ja raportit ottelut jokaisesta, vaikka ne olisivatkin kaksoiskappaleita.

Vastaa

Jos haluat etsiä tiedostoja (ei hakemistoja) ei-rekursiivisesti hakemiston sisällä:

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

-maxdepth 0 ei etsi hakua . Se yrittää sovittaa yhteen vain tiedosto- / hakemistonimet, jotka olet antanut argumentteina kohdassa find. Esimerkiksi. Yllä olevassa lauseessa yritä sovittaa arvo 0 käyttämällä file1 arvoon . joka ei täsmää. Jos * välitetään . -kohdan sijaan, bash korvaisi * nykyisen hakemiston tiedostoluettelolla mikä palauttaisi ottelun.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *