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
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. Tarkoitingrep -i
. I u se[^/]*
eikä.*
, jotta et saisi tiedostoja hakemistoista, joiden nimi alkaaWSFY
. - @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.
-type f
-lipulla, joten se voitti ' älä vaivaudu katsomaan nimeä, jos inode on hakemisto. Mutta ' s optimoinnin pedanttiset tasot …