Jeg leter etter filen «WSFY321.c» i et stort kataloghierarki.
Vanligvis bruker jeg GNU finne : find . -name "WSFY321.c"
Men jeg vet ikke saken, det kan være store, små bokstaver eller en blanding av begge deler.
Hva er den enkleste måten å finne denne filen?
Er det noe bedre enn find . | grep -i "WSFY321.c"
?
Svar
Nylige versjoner av GNU find
har et -iname
-flagg for store og små bokstaver.
find . -iname "WSFY321.c"
Kommentarer
Svar
Med GNU find, eller andre versjoner av funn som har det:
find . -iname "WSFY321.c"
Med andre versjoner:
find . -name "[Ww][Ss][Ff][Yy]321.[Cc]"
Eller et kompromiss som er tregere, men lettere å skrive:
find . -name "????321.c" | grep -i "/WSFY[^/]*$"
Eller i zsh:
print -rl -- **/(#i)WSFY321.c
Kommentarer
- @Gilles
grep
-versjonen filtrerer bare store bokstaver, og jeg har ikke ' t forstå ' [^ /] ' .. (ikke /) - @Gilles Hva er argumentet til bruk de enkle anførselstegnene i det første tilfellet (nøyaktig filnavn) over ingen anførselstegn i det hele tatt?
- @ Peter.O Nei
*
etter/
i bash-versjonen. Jeg mentegrep -i
. Jeg u se[^/]*
i stedet for.*
for ikke å fange filer i kataloger hvis navn begynner medWSFY
. - @Bernhard Consistency.
- Takk Gilles: Jeg slettet den forrige kommentaren med feil syntaks og testet den endrede versjonen, men den ' t arbeid uten * (av en uventet grunn; for meg i det minste). Det store og små bokstaver fungerer ikke lenger:
shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c
… Jeg antar at ' hvorfor det kalles en nocase glob : det fungerer bare i sammenheng med en glob (eller så ser det ut til).
Svar
To løsninger for macOS:
Bruk av GNU find
:
brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c"
Bruker 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 er alternativet -iname tilgjengelig som standard.
-type f
flagget slik at den vant ' bry deg ikke om å se på navnet hvis inoden er en katalog. Men det ' s pedantiske nivåer av optimalisering …find . -iname \*WSFY321.c\* -type f