Risposte:
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
funzionerà. Potrebbe esserci un modo più elegante.
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
altrimenti il exec si applica solo all'ultima parte ( -iname '*.jpg'
in questo caso).
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
stamperà solo i file jpg! Le parentesi sono necessarie qui:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
La -E
si evita di dover sfuggire alle parentesi e tubi nella vostra regex.
-E
opzione dice find
di usare "espressioni regolari estese". Diversi altri strumenti hanno un'opzione simile, ma non sono sicuro che questa opzione sia disponibile su tutte le distribuzioni UNIX.
find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.
find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. L'uso della -iregex
bandiera indica find
di abbinare il caso in modo insensibile.
find /path/to/ -type f -print0 | xargs -0 file | grep -i image
Questo utilizza il file
comando per provare a riconoscere il tipo di file, indipendentemente dal nome file (o estensione).
Se /path/to
o un nome file contiene la stringa image
, quanto sopra potrebbe restituire hit fasulli. In tal caso, suggerirei
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
Tutti hanno un formato leggermente diverso.
nel caso in cui i file non abbiano estensione possiamo cercare il tipo mime di file
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'
dove (audio | video | matroska | mpeg) sono tipi mime regex
e se vuoi eliminarli:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
o elimina tutto il resto tranne quelle estensioni:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
nota il! ~ invece di ~