Мне нужно найти все файлы изображений из каталога (gif, png, jpg, jpeg).
find /path/to/ -name "*.jpg" > log
Как изменить эту строку, чтобы найти не только файлы .jpg?
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg'
будет работать. Может быть, более элегантный способ.
exec
не работает таким образом.
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
-E
избавляет вас от необходимости избегать появления парсеров и труб в вашем регулярном выражении.
-E
указывает find
использовать «расширенные регулярные выражения». Некоторые другие инструменты имеют аналогичную опцию, но я не уверен, что эта опция доступна во всех дистрибутивах UNIX.
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/
В дополнение к ответу @Dennis Williamson выше, если вы хотите, чтобы одно и то же регулярное выражение было нечувствительным к регистру для расширений файла, используйте -iregex:
find /path/to -iregex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
find -regex ".*\.\(jpg\|gif\|png\|jpeg\)"
В Mac OS используйте
find -E packages -regex ".*\.(jpg|gif|png|jpeg)"