Как исключить несколько расширений файлов в дереве?

256
Hagbard Celine

При использовании команды дерева я бы хотел исключить листинг *.pngи *.svgвывод. Проблема в том, что каждое расширение скобки, которое я пробую, не работает. Это из-за того, как дерево обрабатывает аргументы командной строки?

tree -I *. tree -I '*.' tree -I '{*.svg,*.png}' tree -I '{*.svg,*.png}' tree -I '*.(v,n}g' tree -I '*.' 

Технические характеристики:

  • GNU bash, версия 4.4.23
  • дерево v1.7.0
2
@Attie решила это для меня в https://superuser.com/a/1354169/939457 Ответ: `tree -I '* .svg | * .png'` Спасибо! Hagbard Celine 5 лет назад 0

1 ответ на вопрос

4
Attie

-Iявляется обратным -P... руководство дает больше информации о том, что является приемлемым для последнего:

https://linux.die.net/man/1/tree

-P pattern 

Список только те файлы, которые соответствуют шаблону подстановки.

Примечание: вы должны использовать эту -aопцию, чтобы также рассмотреть файлы, начинающиеся с точки .для сопоставления.

Допустимыми подстановочными *символами являются (любой ноль или более символов), ?(любой отдельный символ), [...](может использоваться любой отдельный символ, указанный в скобках (необязательно -(тире) для диапазона символов: например:) [A-Z], и [^...](любой отдельный символ, не указанный в скобках) ) и |разделяет альтернативные шаблоны.

Там нет упоминания о синтаксисе расширения скобки оболочки ... Это расширение обрабатывается tree, нет bash.

И, к сожалению, вы не можете указать -Iнесколько раз ...

Вместо этого вам нужно перечислить полные шаблоны с помощью pipe ( |), чтобы разделить их:

tree -I '*.svg|*.png' 

Обратите внимание на использование одинарных кавычек для предотвращения расширения оболочкой звездочки ( *) или переменных (вводится через доллар - $).


Обратите также внимание, что даже невозможно принудительно использовать расширение скобки оболочки, как показано ниже:

$ tree -I '*.' + tree -I '*.svg' '*.png' *.png [error opening dir] 

Похожие вопросы