Я просто хочу получить файлы из текущего каталога и только вывод .mp4 .mp3 .exe файлы, ничего больше. Поэтому я подумал, что могу просто сделать это:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
Но нет, поскольку первый grep будет выводить только mp4, поэтому остальные 2 grep не будут использоваться.
Любые идеи? PS, запускаю этот скрипт на Slow Leopard.
shopt -s nullglob
и затем просто обращайтесь к*.exe *.mp3 *.mp4
. См. Mywiki.wooledge.org/ParsingLsОтветы:
Почему нет:
Я не уверен, где я узнал это - но я использовал это.
источник
ls: *.exe: No such file or directory
например:ls *.{zip,tar.gz,tar} 2>/dev/null
Используйте регулярные выражения с
find
:Если вы передаете имена файлов:
Это защищает имена файлов, которые содержат пробелы или переводы строк.
OS X
find
поддерживает только чередование, когда используется-E
(расширенная) опция.источник
find . -iregex '.*\(mp3\|mp4\|exe\)'
mysupermp3.jpg
рассмотрите возможность добавления$
в конце регулярного выражения и\\.
расширений передegrep
- расширенный grep - поможет здесьдолжен сделать работу.
источник
ls
на терминал (или с-C
опцией) выводит несколько столбцов.ls
на трубу (или с-1
) имеет один столбец вывода. (Сравните выводls
сls | cat
).самый простой способ - просто использовать ls
источник
ls
не имеет какой-то тихой опции.На всякий случай: почему вы не используете
find
?источник
find . -name '*.mkv' -o -name '*.flv'
(добавляя столько предложений -o, сколько требуется). Мне нужно.
было указать каталог, а флаг-name
нет-iname
- я на macOS 10.13.Нет необходимости в grep. Подстановочные знаки Shell сделают свое дело.
Если вы бежали
тогда непревзойденные глобусы будут удалены полностью и не будут оставлены в командной строке нерасширенными.
Если вы хотите, чтобы регистр не учитывал регистр (поэтому * .mp3 будет соответствовать foo.MP3):
источник
-R
опцией для отображения соответствующих файлов в подкаталогах, но эта опция, похоже, не имеет никакого эффекта, и я все еще получаю только результаты текущего каталога.Если вы все еще ищете альтернативное решение:
Не стесняйтесь добавлять больше флагов -e, если это необходимо.
источник
Для пользователей OSX :
Если вы используете
ls *.{mp3,exe,mp4}
, он выдаст ошибку, если одно из этих расширений не даст результатов.Использование
ls *.(mp3|exe|mp4)
вернет все файлы, соответствующие этим расширениям, даже если у одного из расширений было 0 результатов .источник
ls *.@(mp3|exe|mp4)
. Вам нужно,shopt -s extglob
чтобы это работало. Кстати,ls
тоже бесполезно, можно просто сделатьprintf '%s\n' *.@(mp3|exe|mp4)
.источник
mdfind
дает лучший / быстрый поиск когда-либо!mdfind -name querystring | grep "\.h$"
находит все заголовки с квест-строкой в заголовке файла. Пронто.ls -R | findstr ".mp3"
ls -R
=> перечисляет подкаталоги рекурсивноисточник
Вот один пример, который работал для меня.
источник