Приостановлено до дальнейшего уведомления. источник
6
У меня не работает на Mac, но работает с опцией -E (расширенная) (может быть, канал является расширенной функцией?): Find -E / path / to -iregex ". * \. (Jpg | gif | png | jpeg) "> log
@Gerald: Скорее всего, вам нужно сгруппировать выражение OR в экранированных скобках: в 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
Хммм, -Eопция говорит findиспользовать «расширенные регулярные выражения». Некоторые другие инструменты имеют аналогичную опцию, но я не уверен, что эта опция доступна во всех дистрибутивах UNIX.
tboyce12
8
Работает и на Mac OS.
c.gutierrez
2
@ tboyce12 Работая над убунтом, я могу указать -regextype упростить регулярное выражение: find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)".
doub1ejack
1
@cjm Может быть find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log. Использование -iregexфлага говорит findо том, что регистр не должен учитываться.
Не могли бы вы объяснить, почему вы добавили (экранированные) скобки вокруг параметров name / iname?
Барт Клейнгельд
Есть ли причина для несоответствия? -iname *.jpg, -o -name *.jpeg, -o -iname *gifВсе они имеют немного другой формат.
Заброшенная корзина
если бы вы могли хотя бы объяснить различия с другими ответами.
Эль-Тиди
6
В дополнение к ответу @Dennis Williamson выше, если вы хотите, чтобы одно и то же регулярное выражение не чувствительно к регистру для расширений файлов, используйте -iregex:
буду работать. Там может быть более элегантный способ.
источник
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
о том, что регистр не должен учитываться.Это использует
file
команду, чтобы попытаться распознать тип файла, независимо от имени файла (или расширения).Если
/path/to
или имя файла содержит строкуimage
, то приведенное выше может возвращать фиктивные совпадения. В этом случае я бы предложилисточник
источник
-iname *.jpg
,-o -name *.jpeg
,-o -iname *gif
Все они имеют немного другой формат.В дополнение к ответу @Dennis Williamson выше, если вы хотите, чтобы одно и то же регулярное выражение не чувствительно к регистру для расширений файлов, используйте -iregex:
источник
На Mac OS используйте
источник
источник
в случае, если файлы не имеют расширения, мы можем искать тип файла MIME
где (аудио | видео | matroska | mpeg) - MIME-типы регулярных выражений
& если вы хотите удалить их:
или удалите все, кроме этих расширений:
обратите внимание! ~ вместо ~
источник