Ответ 1
Почему бы и нет:
ls *.{mp3,exe,mp4}
Я не уверен, где я это узнал, но я использовал это.
Я просто хочу получить файлы из текущего каталога и выводить только файлы .mp4.mp3.exe. Поэтому я подумал, что могу просто сделать это:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
Но нет, поскольку первый grep будет выводить только mp4, а остальные 2 grep не будут использоваться.
Любые идеи? PS, Запуск этого script на медленном леопарде.
Почему бы и нет:
ls *.{mp3,exe,mp4}
Я не уверен, где я это узнал, но я использовал это.
Используйте регулярные выражения с find
:
find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\n'
Если вы связываете имена файлов:
find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\0' | xargs -0 dosomething
Это защищает имена файлов, которые содержат пробелы или символы новой строки.
OS X find
поддерживает только чередование, когда используется опция -E
(расширенная).
find -E . -regex '.*\.(mp3|mp4|exe)'
egrep
- расширенный grep - поможет здесь
ls | egrep '\.mp4$|\.mp3$|\.exe$'
должен выполнить эту работу.
Самый простой способ - просто использовать ls
ls *.mp4 *.mp3 *.exe
На всякий случай: почему вы не используете find
?
find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'
Нет необходимости в grep. Символы оболочки будут делать трюк.
ls *.mp4 *.mp3 *.exe
Если вы запустили
shopt -s nullglob
то непревзойденные глобы будут полностью удалены и не будут оставлены в командной строке без изменений.
Если вы хотите нечувствительность к регистру (так что *.mp3 будет соответствовать foo.MP3):
shopt -s nocaseglob
Если вы все еще ищете альтернативное решение:
ls | grep -i -e '\\.tcl$' -e '\\.exe$' -e '\\.mp4$'
Не стесняйтесь добавлять дополнительные флаги -e, если это необходимо.
Для пользователей OSX:
Если вы используете ls *.{mp3,exe,mp4}
, он выдает ошибку, если одно из этих расширений не имеет результатов.
Использование ls *.(mp3|exe|mp4)
вернет все файлы, соответствующие этим расширениям, даже если у одного из расширений было 0 результатов.
ls | grep "\.mp4$
\.mp3$
\.exe$"
ls -R | findstr ".mp3"
ls -R
= > рекурсивно перечисляет подкаталоги