Как использовать команду find для поиска всех файлов с расширениями из списка?

Мне нужно найти все файлы изображений из каталога (gif, png, jpg, jpeg).

find /path/to/ -name "*.jpg" > log

Как изменить эту строку, чтобы найти не только файлы .jpg?

4b9b3361
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg'

будет работать. Может быть, более элегантный способ.

92
ответ дан 12 апр. '10 в 14:16
источник

find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log

-E избавляет вас от необходимости избегать появления парсеров и труб в вашем регулярном выражении.

15
ответ дан 21 мая '14 в 0:21
источник
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/
10
ответ дан 12 апр. '10 в 14:47
источник

В дополнение к ответу @Dennis Williamson выше, если вы хотите, чтобы одно и то же регулярное выражение было нечувствительным к регистру для расширений файла, используйте -iregex:

find /path/to -iregex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
6
ответ дан 13 окт. '15 в 13:01
источник