Відповіді:
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
буду працювати. Можливо, є більш елегантний спосіб.
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
інакше exec застосовується лише до останньої частини ( -iname '*.jpg'
у цьому випадку).
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
буде друкувати лише jpg-файли! Тут вам потрібні дужки:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
Це -E
позбавляє вас від необхідності уникати паронів і труб у вашому регексе.
-E
опція пропонує find
використовувати "розширені регулярні вирази". Кілька інших інструментів мають подібний варіант, але я не впевнений, що ця опція доступна у всіх дистрибутивах UNIX.
find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.
find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. Використання -iregex
прапора вказує find
на невідчутну відповідність справ.
find /path/to/ -type f -print0 | xargs -0 file | grep -i image
Для цього використовується file
команда, щоб спробувати розпізнати тип файлу, незалежно від імені файлу (або розширення).
Якщо /path/to
або ім'я файлу містить рядок image
, то вищезгадане може повернути помилкові звернення. У такому випадку я б запропонував
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
Всі вони мають дещо інший формат.
у випадку, якщо файли не мають розширення, ми можемо шукати тип mime файлу
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'
де (аудіо | відео | matroska | mpeg) - mime regex
& якщо ви хочете видалити їх:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
або видалити все інше, крім цих розширень:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
помітити! ~ замість ~