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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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/

Ответ 5

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

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

Ответ 6

find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)

Ответ 7

find -regex ".*\.\(jpg\|gif\|png\|jpeg\)"

Ответ 8

В Mac OS используйте find -E packages -regex ".*\.(jpg|gif|png|jpeg)"