Respuestas:
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
trabajará. Puede haber una forma más elegante.
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
contrario, el ejecutivo solo se aplica a la última parte ( -iname '*.jpg'
en este caso).
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
solo imprimirá los archivos jpg! Necesita paréntesis aquí:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
Esto le -E
ahorra tener que escapar de los parens y las tuberías en su expresión regular.
-E
opción le dice find
que use "expresiones regulares extendidas". Varias otras herramientas tienen una opción similar, pero no estoy seguro de que esta opción esté disponible en todas las distribuciones de UNIX.
find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.
find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. Usar la -iregex
bandera le dice find
que coincida con mayúsculas y minúsculas sin distinción.
find /path/to/ -type f -print0 | xargs -0 file | grep -i image
Esto utiliza el file
comando para intentar reconocer el tipo de archivo, independientemente del nombre de archivo (o extensión).
Si /path/to
o un nombre de archivo contiene la cadena image
, entonces lo anterior puede devolver resultados falsos. En ese caso, sugeriría
cd /path/to
find . -type f -print0 | xargs -0 file --mime-type | grep -i image/
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
-iname *.jpg
, -o -name *.jpeg
, -o -iname *gif
Todos tienen un formato ligeramente diferente.
en caso de que los archivos no tengan extensión podemos buscar el tipo de archivo mime
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'
donde (audio | video | matroska | mpeg) son tipos mime regex
y si quieres eliminarlos:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
o eliminar todo lo demás excepto esas extensiones:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
observe el ~ en lugar de ~