Sto cercando il file “WSFY321.c” in unenorme gerarchia di directory.
Di solito utilizzo GNU find : find . -name "WSFY321.c"
Ma non conosco il caso, potrebbe essere maiuscolo, minuscolo o una combinazione di entrambi.
Qual è il modo più semplice per trovare questo file?
Cè qualcosa di meglio di find . | grep -i "WSFY321.c"
?
Risposta
Le versioni recenti di GNU find
hanno un flag -iname
, per le ricerche di nomi senza distinzione tra maiuscole e minuscole.
find . -iname "WSFY321.c"
Commenti
Answer
Con GNU find, o altre versioni di find che lo hanno:
find . -iname "WSFY321.c"
Con altre versioni:
find . -name "[Ww][Ss][Ff][Yy]321.[Cc]"
O un compromesso più lento ma più facile da digitare:
find . -name "????321.c" | grep -i "/WSFY[^/]*$"
O in zsh:
print -rl -- **/(#i)WSFY321.c
Commenti
- @Gilles La versione
grep
filtra solo le maiuscole e io non ' t capire il ' [^ /] ' .. (non /) - @Gilles Qual è largomento per utilizzare le virgolette singole nel primo caso (nome file esatto) senza virgolette?
- @ Peter.O No
*
dopo/
nella versione bash. Intendevogrep -i
. se[^/]*
anziché.*
in modo da non catturare file nelle directory il cui nome inizia conWSFY
. - @Bernhard Consistency.
- Grazie Gilles: ho eliminato il commento precedente con una sintassi errata e ho testato la versione modificata, ma non ' t funziona senza * (per un motivo inaspettato; almeno a me). Lopzione senza distinzione tra maiuscole e minuscole non funziona più:
shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c
… Suppongo che ' sia il motivo per cui è chiamato nocase glob : funziona solo nel contesto di un glob (o almeno così sembra).
Risposta
Due soluzioni per macOS:
Utilizzo di GNU find
:
brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c"
Utilizzo di GNU sed
:
brew install gnu-sed --default-names # restart Terminal find -name "$(sed "s|\([[:alpha:]]\)|[\U\1\L\1]|g" <<<"WSFY321.c")"
Commenti
- Su macOS Sierra lopzione -iname è disponibile per impostazione predefinita.
-type f
in modo che abbia vinto ' Non preoccuparti di guardare il nome se linode è una directory. Ma questi ' livelli di ottimizzazione pedanti …find . -iname \*WSFY321.c\* -type f