Intereting Posts
Сервер не принимает открытый ключ для входа ssh без пароля Невозможно сравнить строку с регулярным выражением, используя оператор теста в сценарии оболочки Как создать приложение приложения Xfce, содержащее только содержимое одной категории? Уязвимость Nessus 35291 Алгоритм слабых взломов: 383 HP OpenView Cinnamon failed: только рабочий стол, без панели, без диалогового окна Gawk: передача массивов в функции mutt: две команды последовательности символов Каким компаниям разрешено производить и продавать продукты Unix? установка бита «x» (исполняемый) с использованием ACL Переслать многоадресную рассылку между двумя сегментами локальной сети (Chromecast) Как создать окно X, которое не будет закрыто каким-либо образом, кроме команды терминала Могу ли я обновить прошивку с помощью виртуальной машины? bash: как вы возвращаете расширения файлов? удалить _ как префикс из нескольких файлов в каталоге в Soalris Высокая нагрузка ввода-вывода от

Список всех файлов, заканчивающихся несколькими расширениями файлов?

Если я хочу, чтобы файлы, заканчивающиеся на .fas я знаю, что я могу сделать следующее с помощью команды ls :

 ls -l /users/jenna/bio/*.fas 

и в нем перечислены все файлы, заканчивающиеся на .fas . Но как я могу получить файлы, заканчивающиеся на .fas или .pep ?

ls -l /users/jenna/bio/(*.fas | *.pep) , похоже, не работает? Я знаю, что могут быть другие команды, которые могут это сделать, но есть ли способ заставить его работать с ls ?

Спасибо за любую помощь!

Используйте это: ls -l /users/jenna/bio/*.{fas,pep}

Или это: find /users/jenna/bio -iname '*.pep' -or -iname '*.fas'

Вещь, которая, скорее всего, будет работать из коробки, – это расширение брекета . Он работает в bash, zsh и ksh.

 ls -l /users/jenna/bio/*.{fas,pep} 

(Нет пробелов вокруг скобок.)

В bash и ksh это отображает ошибку, если одно из расширений не сопоставляется, но в любом случае перечисляет файлы, соответствующие другому расширению. Причина этого заключается в том, что расширение фигурной скобки не является функцией сопоставления подстановочных знаков, но текстовая замена: *.{fas,pep} преобразуется в *.fas *.pep прежде чем оболочка начнет поиск файлов, соответствующих шаблонам. В zsh вы получите сообщение об ошибке, и команда не будет запущена, но есть лучший способ: шаблон «или». Эта ошибка не будет выходить за пределы, если ни одно из расширений не будет соответствовать.

 ls -l /users/jenna/bio/*.(fas|pep) 

Или шаблоны также доступны с другим синтаксисом : @(…|…) ; в bash, этот синтаксис должен быть активирован с помощью shopt -s extglob , а в zsh этот синтаксис необходимо активировать с помощью setopt ksh_glob .

 ls -l /users/jenna/bio/*.@(fas|pep) 

(Некоторые из этих действий могут быть сконфигурированы. Все мои утверждения относятся к конфигурации по умолчанию оболочки, если явно не указано.)

Если вы хотите сканировать рекурсивно без раздражающих ошибок, вы обычно получаете от find или ls (например: « Permission denied », « Not a directory »), который может тормозить скрипты или команды xargs , также команда tree нигде не упоминалась:

 tree -fai / | grep -e ".fas$" -e ".pep$" 

выше я использовал root / , но может быть любым путем:

 tree -fai /users/jenna/bio/ | grep -e ".fas$" -e ".pep$"" 

КСТАТИ