Hledám soubor „WSFY321.c“ ve velké hierarchii adresářů.
Obvykle bych použil Najít GNU : find . -name "WSFY321.c"
Neznám však ten případ, může to být velká, malá nebo kombinace obou.
Jaký je nejjednodušší způsob, jak tento soubor najít?
Existuje něco lepšího než find . | grep -i "WSFY321.c"
?
Odpovědět
Poslední verze GNU find
mají příznak -iname
pro vyhledávání názvů bez rozlišení velkých a malých písmen.
find . -iname "WSFY321.c"
Komentáře
Odpověď
S GNU find nebo jinými verzemi find, které to mají:
find . -iname "WSFY321.c"
S jinými verzemi:
find . -name "[Ww][Ss][Ff][Yy]321.[Cc]"
Nebo kompromis, který je pomalejší, ale snadnější na psaní:
find . -name "????321.c" | grep -i "/WSFY[^/]*$"
Nebo v zsh:
print -rl -- **/(#i)WSFY321.c
Komentáře
- @Gilles Verze
grep
filtruje pouze velká písmena a ' t porozumět ' [^ /] ' .. (not /) - @Gilles Jaký je argument použít jednoduché uvozovky v prvním případě (přesný název souboru) nad žádnými uvozovkami?
- @ Peter.O Ne
*
po/
v bash verzi. Myslel jsemgrep -i
. se[^/]*
spíše než.*
, aby se nezachytily soubory v adresářích, jejichž název začínáWSFY
. - @Bernhard Consistency.
- Díky Gilles: Předešlý komentář jsem smazal s nesprávnou syntaxí a otestoval upravenou verzi, ale ' t práce bez * (z neočekávaného důvodu; alespoň pro mě). Možnost rozlišující velká a malá písmena již nefunguje:
shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c
… předpokládám, že proto ' se tomu říká nocase glob : funguje pouze v kontextu glob (nebo se to tak alespoň zdá).
Odpověď
Dvě řešení pro macOS:
Používání GNU find
:
brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c"
Používání GNU sed
:
brew install gnu-sed --default-names # restart Terminal find -name "$(sed "s|\([[:alpha:]]\)|[\U\1\L\1]|g" <<<"WSFY321.c")"
Komentáře
- V systému macOS Sierra je ve výchozím nastavení k dispozici možnost -iname.
-type f
, takže zvítězil ' neobtěžuje se dívat se na jméno, pokud je inode adresář. Ale to ' s pedantské úrovně optimalizace …find . -iname \*WSFY321.c\* -type f