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



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



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


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



какие идеи? PS, запускаем этот скрипт на Slow Leopard.

533   11  

11 ответов:

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

ls *.{mp3,exe,mp4}

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

использовать регулярные выражения с find:

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\n'

если вы передаете имена файлов:

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f' | xargs -0 dosomething

это защищает имена файлов, которые содержат пробелы или новые строки.

OS X find поддерживает только чередование, когда (улучшенный) вариант.

find -E . -regex '.*\.(mp3|mp4|exe)'

egrep -- extended 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$'

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

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

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

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

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

ls -R | findstr ".mp3"

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

вот один пример, который работал для меня.

find <mainfolder path> -name '*myfiles.java' | xargs -n 1 basename

Comments

    Ничего не найдено.