Почему эта команда поиска не работает? Regex & Найти варианты для файлов .mp3 .wav и .m4a

2015.10.25 Move on and Be Blessed.wav dummy.m4a 2015.11.17 BS Full.wav.mp3 2015.11.17 BS MOL.wav.mp3 find . -name '*.mp3' -o -name '*.wav' -o -name '*.m4a' -print0 

но эта команда работает find . -name "*.wav" -o -name '*.mp3' -print0 find . -name "*.wav" -o -name '*.mp3' -print0

Я читал Как использовать команду find для поиска нескольких расширений и Как преобразовать все .wav-файлы в подкаталоги в .aac, используя neroAacEnc?

Почему моя версия регулярного выражения не работает? find . -regex '*\.\(.mp3\|.wav\|.m4a\)' -print0 find . -regex '*\.\(.mp3\|.wav\|.m4a\)' -print0 Могу ли я find . -regex '*\.\(.mp3\|.wav\|.m4a\)' -print0 эту команду регулярного выражения в следующую команду, указанную во второй ссылке, find . -name "*.wav" -print0 | while read -d $'\0' file; do ffmpeg -i "$file" -c:a libfdk_aac -vbr 3 output.m4a "${file%wav}m4a"; done find . -name "*.wav" -print0 | while read -d $'\0' file; do ffmpeg -i "$file" -c:a libfdk_aac -vbr 3 output.m4a "${file%wav}m4a"; done find . -name "*.wav" -print0 | while read -d $'\0' file; do ffmpeg -i "$file" -c:a libfdk_aac -vbr 3 output.m4a "${file%wav}m4a"; done заменив find . -name "*.wav" -print0 find . -name "*.wav" -print0 ?

2 Solutions collect form web for “Почему эта команда поиска не работает? Regex & Найти варианты для файлов .mp3 .wav и .m4a”

Ваш вопрос, кажется, отсутствует, но причина, по которой ваша команда find-regex не работает, заключается в том, что вам нужно начинать с .* (Синтаксис regex для «ничего») не просто * (синтаксис glob для «ничего»). У вас также есть посторонние . перед вашими расширениями.

 find . -regex '.*\.\(mp3\|wav\|m4a\)' -print0 

Что касается вашей трубы, она должна работать. Проверьте это, поставив echo перед ffmpeg . Моим инстинктом было бы написать функцию или скрипт, который я мог бы проверить на одном файле, или же убедиться, что у моих файлов нет новых строк. Пространства – это одно, такие как пользователи, но новые линии – это боль.

Ваше регулярное выражение не работает, потому что это не действительное регулярное выражение.

* не работает ничего похожего на регулярное выражение. Чтобы получить примерно такое же поведение, ваша потребность .* Но обычно вам ничего не нужно, потому что регулярное выражение является подстрокой.

Вам также нужно избегать любого . вы имеете в виду, чтобы соответствовать буквальному, потому что иначе это означает любой символ. Потому что вы сбежали первым . а не второй, вы на самом деле согласны.

 .?mp3 

Который я не думаю, что вы, вероятно, будете иметь.

Так:

 find -regex '\.(mp3|wav|m4a)$' 

Вероятно, это трюк.

Я не уверен, почему ваш первый шаблон не работает, потому что я сейчас не в системе Unix, чтобы дважды проверить. Но я предполагаю, что это будет связано с тем, что -print0 применяется к последнему термину, а не ко всем из них. Каким-либо образом вы первый пример – какие файлы wav печатаются?

Поскольку вам могут потребоваться скобки:

 find \( -name '*.wav' -o -name '*.mp3' -o -name '*.m4a' \) -print0 
  • Есть ли какой-либо инструмент для текстового поиска, предварительно загруженный с помощью известных регулярных выражений?
  • Уплотнение шаблонов `find`
  • использование регулярных выражений в exim-фильтрации
  • Поиск всех типов расширений, указанных в файле html
  • скрипт для проверки запущенных служб на определенных портах
  • Проверка, является ли входной номер целым числом
  • идентификация даты awk из входного файла
  • Использование Uniq -c с регулярным выражением или подсчет количества удаленных строк
  • команда: ls / etc | сортировать | grep d * не дает результатов, но ls / etc | сортировать | grep p * перечисляет всю директорию
  • Regex on Postfix с использованием Centos
  • Анализ данных журнала и печать обратных ссылок регулярных выражений
  • Linux и Unix - лучшая ОС в мире.