Как использовать команду find, чтобы найти все файлы с расширениями из списка? - PullRequest
164 голосов
/ 12 апреля 2010

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

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

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

Ответы [ 9 ]

167 голосов
/ 12 апреля 2010
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
128 голосов
/ 12 апреля 2010
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg'

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

24 голосов
/ 21 мая 2014

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

* * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * *) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1003* * * * * * * *] * * * * * * * * * * * * * * * * * * * * * * * * * *1005* избавляет вас от необходимости избегать паренов и труб в вашем регулярном выражении.
11 голосов
/ 12 апреля 2010
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/
6 голосов
/ 13 октября 2015

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

find /path/to -iregex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
5 голосов
/ 12 апреля 2010
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
1 голос
/ 29 октября 2017

В Mac OS используйте

find -E packages  -regex ".*\.(jpg|gif|png|jpeg)"
1 голос
/ 08 июня 2015
find -regex ".*\.\(jpg\|gif\|png\|jpeg\)"
0 голосов
/ 28 июля 2018

в случае, если файлы не имеют расширения, мы можем искать 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

обратите внимание на! ~ Вместо ~

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...