Etsin tiedostoa ”WSFY321.c” valtavassa hakemistohierarkiassa.
Käytän yleensä GNU-haku : find . -name "WSFY321.c"
Mutta en tiedä tapausta, se voi olla isoja, pieniä tai molempia.

Mikä on helpoin tapa löytää tämä tiedosto?
Onko jotain parempaa kuin find . | grep -i "WSFY321.c"?

Vastaa

GNU: n uusimmilla versioilla find on -iname -lippu kirjainkoon ottamattomille nimihakuille.

find . -iname "WSFY321.c" 

Kommentit

  • Koska ' etsivät uudelleen tiedostoa, jonka voit todennäköisesti ajaa pari punkkia pois -type f -lipulla, joten se voitti ' älä vaivaudu katsomaan nimeä, jos inode on hakemisto. Mutta ' s optimoinnin pedanttiset tasot …
  • Jos haluat työskennellä joidenkin regexien kanssa, voit / li>

vastaus

GNU-haulla tai muilla löydöksen versioilla, joilla on se:

find . -iname "WSFY321.c" 

Muut versiot:

find . -name "[Ww][Ss][Ff][Yy]321.[Cc]" 

Tai kompromissi, joka on hitaampi, mutta helpompi kirjoittaa:

find . -name "????321.c" | grep -i "/WSFY[^/]*$" 

Tai zsh-muodossa:

print -rl -- **/(#i)WSFY321.c 

kommentit

  • @Gilles grep -versio suodattaa vain isoja kirjaimia, enkä ' t ymmärtää ' [^ /] ' .. (ei /)
  • @Gilles Mikä on argumentti käytä ensimmäisessä tapauksessa yksittäisiä lainauksia (tarkka tiedostonimi) lainausmerkkien yli?
  • @ Peter.O Ei * bash-versiossa. Tarkoitin grep -i. I u se [^/]* eikä .*, jotta et saisi tiedostoja hakemistoista, joiden nimi alkaa WSFY.
  • @Bernhardin johdonmukaisuus.
  • Kiitos Gilles: Poistin edellisen kommentin virheellisellä syntaksilla ja testasin muutetun version, mutta se ei ' t toimivat ilman * (odottamattomasta syystä; ainakin minulle). Kirjainkoon erottamaton vaihtoehto ei enää toimi: shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c … Oletan, että ' s miksi sitä kutsutaan nokaseksi‍ glob : se toimii vain globaalissa kontekstissa (tai niin näyttää siltä).

Vastaa

Kaksi ratkaisua macOS: lle:

GNU: n käyttäminen find:

brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c" 

GNU: n käyttäminen sed:

brew install gnu-sed --default-names # restart Terminal find -name "$(sed "s|\([[:alpha:]]\)|[\U\1\L\1]|g" <<<"WSFY321.c")" 

kommentit

  • macOS Sierrassa oletuksena on -iname-vaihtoehto.

Vastaa

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