Jag letar efter filen ”WSFY321.c” i en enorm kataloghierarki.
Vanligtvis skulle jag använda GNU-sökning : find . -name "WSFY321.c"
Men jag vet inte fallet, det kan vara versaler, gemener eller en blandning av båda.
Vad är det enklaste sättet att hitta den här filen?
Finns det något bättre än find . | grep -i "WSFY321.c"
?
Svar
Senaste versioner av GNU find
har en -iname
-flagga för skiftlägeskänsliga namnsökningar.
find . -iname "WSFY321.c"
Kommentarer
Svar
Med GNU find, eller andra versioner av find som har det:
find . -iname "WSFY321.c"
Med andra versioner:
find . -name "[Ww][Ss][Ff][Yy]321.[Cc]"
Eller en kompromiss som är långsammare men lättare att skriva:
find . -name "????321.c" | grep -i "/WSFY[^/]*$"
Eller i zsh:
print -rl -- **/(#i)WSFY321.c
Kommentarer
- @Gilles
grep
-versionen filtrerar bara versaler och jag ' t förstå ' [^ /] ' .. (inte /) - @Gilles Vad är argumentet för använda de enskilda citaten i det första fallet (exakt filnamn) utan några citat alls?
- @ Peter.O Nej
*
efter/
i bash-versionen. Jag menadegrep -i
. Jag u se[^/]*
snarare än.*
för att inte fånga filer i kataloger vars namn börjar medWSFY
. - @Bernhard Consistency.
- Tack Gilles: Jag raderade den tidigare kommentaren med fel syntax och testade den ändrade versionen, men den ' t fungerar utan * (av en oväntad anledning; åtminstone för mig). Det skiftlägeskänsliga alternativet fungerar inte längre:
shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c
… Jag antar att ' varför det kallas ett nocase glob : det fungerar bara i ett globs sammanhang (eller så verkar det).
Svara
Två lösningar för macOS:
Använda GNU find
:
brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c"
Med GNU sed
:
brew install gnu-sed --default-names # restart Terminal find -name "$(sed "s|\([[:alpha:]]\)|[\U\1\L\1]|g" <<<"WSFY321.c")"
Kommentarer
- På macOS Sierra är alternativet -iname tillgängligt som standard.
-type f
-flaggan så att den vann ' bry dig inte om att titta på namnet om inoden är en katalog. Men att ' s pedantiska nivåer av optimering …find . -iname \*WSFY321.c\* -type f