Respostas:
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
vai funcionar. Pode haver uma maneira mais elegante.
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
caso contrário, o exec se aplica apenas à última parte ( -iname '*.jpg'
neste caso).
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
imprimirá apenas os arquivos jpg! Você precisa de colchetes aqui:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
A -E
poupa de ter que escapar os parênteses e tubos em seu regex.
-E
opção diz find
para usar "expressões regulares estendidas". Várias outras ferramentas têm uma opção semelhante, mas não tenho certeza se esta opção está disponível em todas as distribuições UNIX.
find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.
find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. O uso da -iregex
bandeira informa find
para corresponder maiúsculas de minúsculas.
find /path/to/ -type f -print0 | xargs -0 file | grep -i image
Isso usa o file
comando para tentar reconhecer o tipo de arquivo, independentemente do nome do arquivo (ou extensão).
Se /path/to
ou um nome de arquivo contiver a string image
, o item acima pode retornar resultados falsos. Nesse caso, eu sugiro
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 têm um formato ligeiramente diferente.
find -regex ".*\.\(jpg\|gif\|png\|jpeg\)"
caso os arquivos não tenham extensão, podemos procurar o tipo mime
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'
onde (audio | video | matroska | mpeg) são tipos mime regex
e se você quiser excluí-los:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
ou exclua tudo, menos essas extensões:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
observe o! ~ em vez de ~