Список файлов с определенными расширениями с помощью ls и grep

Я просто хочу получить файлы из текущего каталога и выводить только файлы .mp4.mp3.exe. Поэтому я подумал, что могу просто сделать это:

ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$

Но нет, поскольку первый grep будет выводить только mp4, а остальные 2 grep не будут использоваться.

Любые идеи? PS, Запуск этого script на медленном леопарде.

Ответ 1

Почему бы и нет:

ls *.{mp3,exe,mp4}

Я не уверен, где я это узнал, но я использовал это.

Ответ 2

Используйте регулярные выражения с 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)'

Ответ 3

egrep - расширенный grep - поможет здесь

ls | egrep '\.mp4$|\.mp3$|\.exe$'

должен выполнить эту работу.

Ответ 4

Самый простой способ - просто использовать ls

ls *.mp4 *.mp3 *.exe

Ответ 5

На всякий случай: почему вы не используете find?

find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'

Ответ 6

Нет необходимости в grep. Символы оболочки будут делать трюк.

ls *.mp4 *.mp3 *.exe

Если вы запустили

shopt -s nullglob

то непревзойденные глобы будут полностью удалены и не будут оставлены в командной строке без изменений.

Если вы хотите нечувствительность к регистру (так что *.mp3 будет соответствовать foo.MP3):

shopt -s nocaseglob

Ответ 7

Если вы все еще ищете альтернативное решение:

ls | grep -i -e '\\.tcl$' -e '\\.exe$' -e '\\.mp4$'

Не стесняйтесь добавлять дополнительные флаги -e, если это необходимо.

Ответ 8

Для пользователей OSX:

Если вы используете ls *.{mp3,exe,mp4}, он выдает ошибку, если одно из этих расширений не имеет результатов.

Использование ls *.(mp3|exe|mp4) вернет все файлы, соответствующие этим расширениям, даже если у одного из расширений было 0 результатов.

Ответ 9

ls | grep "\.mp4$
\.mp3$
\.exe$"

Ответ 10

ls -R | findstr ".mp3"

ls -R = > рекурсивно перечисляет подкаталоги