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

  • Además, ya que ' está buscando específicamente un archivo que pueda probablemente quitarle otro par de marcas con la marca -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 …
  • Para trabajar con algunas expresiones regulares, puede hacer find . -iname \*WSFY321.c\* -type f

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 decir grep -i. I u se [^/]* en lugar de .* para no capturar archivos en directorios cuyo nombre comience con WSFY.
  • @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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *