Estoy buscando el archivo «WSFY321.c» en una enorme jerarquía de directorios.
Por lo general, usaría GNU find : find . -name "WSFY321.c"
Pero no conozco el caso, podría ser mayúscula, minúscula o una combinación de ambas.
¿Cuál es la forma más fácil de encontrar este archivo?
¿Hay algo mejor que find . | grep -i "WSFY321.c"
?
Respuesta
Las versiones recientes de GNU find
tienen un indicador -iname
, para búsquedas de nombres que no distinguen entre mayúsculas y minúsculas.
find . -iname "WSFY321.c"
Comentarios
Responder
Con GNU find, u otras versiones de find que lo tengan:
find . -iname "WSFY321.c"
Con otras versiones:
find . -name "[Ww][Ss][Ff][Yy]321.[Cc]"
O un compromiso que «es más lento pero más fácil de escribir:
find . -name "????321.c" | grep -i "/WSFY[^/]*$"
O en zsh:
print -rl -- **/(#i)WSFY321.c
Comentarios
- @Gilles La versión
grep
filtra solo mayúsculas y yo no ' t entender el ' [^ /] ' .. (no /) - @Gilles ¿Cuál es el argumento para usar comillas simples en el primer caso (nombre de archivo exacto) sobre ninguna comilla?
- @ Peter.O No
*
después de/
en la versión de bash. Quise decirgrep -i
. I u se[^/]*
en lugar de.*
para no capturar archivos en directorios cuyo nombre comience conWSFY
. - @Bernhard Consistency.
- Gracias Gilles: Eliminé el comentario anterior con una sintaxis incorrecta y probé la versión enmendada, pero no ' t funciona sin el * (por una razón inesperada; para mí al menos). La opción que no distingue entre mayúsculas y minúsculas ya no funciona:
shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c
… Supongo que ' es la razón por la que se llama nocase glob : solo funciona en el contexto de un glob (o eso parece).
Respuesta
Dos soluciones para macOS:
Usando GNU find
:
brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c"
Usando GNU sed
:
brew install gnu-sed --default-names # restart Terminal find -name "$(sed "s|\([[:alpha:]]\)|[\U\1\L\1]|g" <<<"WSFY321.c")"
Comentarios
- En macOS Sierra, la opción -iname está disponible de forma predeterminada.
-type f
para que gane ' No se moleste en mirar el nombre si el inodo es un directorio. Pero esos ' s niveles pedantes de optimización …find . -iname \*WSFY321.c\* -type f