Puedo obtener todas las jpg imágenes usando:

find . -name "*.jpg" 

Pero, ¿cómo puedo agregar png también a los resultados?

Comentarios

Responder

Utilice el indicador -o entre diferentes parámetros.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) funciona a la perfección.

NOTA Debe haber un espacio entre el corchete y su contenido o no funcionará.

Explicación:

  • -type f – solo busca archivos (no directorios)
  • \( & \) – son necesarios para que -type f se aplique a todos los argumentos
  • -o – OR lógico operador
  • -iname – como -name, pero la coincidencia no distingue entre mayúsculas y minúsculas

Comentarios

  • ¿Necesita los paréntesis? El comando funciona para mí sin ellos. ¿Son necesarios para algunos shells?
  • @miked El comando " funcionará " sin ellos, sí, pero usted ' d termina obteniendo resultados en directorios que terminan en .png así como en archivos que terminan en .jpg, que no es exactamente lo que se pretendía.
  • ¡Gracias por aclararlo! El type -f no se extiende ni se aplica a ambas expresiones sin los paréntesis. Por lo tanto, find ./ -type f -iname \*.jpg -o -type f -iname \*.png también funciona … aunque ' s dos caracteres más largos 🙂
  • Es ' una cuestión de precedencia del operador. Al igual que a * b + c es diferente de a * (b + c)
  • @jdhao Buena captura, modificada.

Respuesta

Puede combinar criterios con -o como sugerido por Shadur . Tenga en cuenta que -o tiene una precedencia menor que la yuxtaposición, por lo que es posible que necesite paréntesis.

find . -name "*.jpg" -o -name "*.png" find . -mtime -7 \( "*.jpg" -o -name "*.png" \) # all .jpg or .png images modified in the past week 

En Linux, puede use -regex para combinar extensiones de una manera más tersa. La sintaxis de expresiones regulares predeterminada es Emacs ( expresiones regulares básicas más algunas extensiones como \| para alternancia); hay una opción para cambiar a expresiones regulares extendidas .

find -regex ".*\.\(jpg\|png\)" find -regextype posix-extended -regex ".*\.(jpg|png)" 

En FreeBSD, NetBSD y OSX, puede usar -regex combinado con -E para expresiones regulares extendidas.

find -E . -regex ".*\.(jpg|png)" 

Comentarios

  • Es ' siempre mejor usar -iname en lugar de -name, entonces también capturará image.JPG y image.PnG

Respuesta

Esto es más correcto:

find . -iregex ".*\.\(jpg\|gif\|png\|jpeg\)$" 

Comentarios

  • ¿Por qué dices que es " más " correcto?
  • @Kevin Supongo que porque -iregex coincide con jpg y con JPG Jpg jpG y demás. Creo que $ no es ' necesario .
  • Esto funciona bien en MinGW .
  • Primero, omitió la carpeta de búsqueda como primer argumento que arrojará un error. En segundo lugar, en OSX, el escape del paréntesis no funcionará, y esto debe usarse en su lugar: find -E . -iregex '.*\.(jpg|png|gif)' como se muestra en la respuesta de @sorin '.

Respuesta

Para que quede claro, la única opción que funciona en Linux, Unix y macOS es:

find -E . -regex ".*\.(jpg|png)" 

Eso se debe a que la versión de OS X es un poco diferente, pero eso es importante para escribir cosas que funcionen bien en la mayoría de las plataformas.

Comentarios

  • El indicador -E no es válido para buscar en Ubuntu 14.04
  • El indicador -E no es válido en MinGW tampoco (al menos la versión / configuración en la que lo probé (configuración predeterminada para una versión en particular)).
  • Qué parte de -type f \( -iname \*.png -o -iname \*.jpg\) no funciona en OSX?
  • Puede confirmar que -type f \( -iname \*.png -o -iname \*.jpg\) funciona en OSX

Responder

/\.(jpe?g|png|gif|bmp)$/i; 

Úselo.

Comentar s

  • Es posible que deba explicar esto un poco.

Deja una respuesta

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