Как исключить несколько расширений файлов в дереве?
При использовании команды дерева я бы хотел исключить листинг *.png
а также *.svg
с выхода. Проблема в том, что каждое расширение скобки, которое я пробую, не работает. Это из-за того, как дерево обрабатывает аргументы командной строки?
tree -I *.{svg,png}
tree -I '*.{svg,png}'
tree -I '{*.svg,*.png}'
tree -I '{*.svg,*.png}'
tree -I '*.{p,s}(v,n}g'
tree -I '*.{svg|png}'
Технические характеристики:
- GNU bash, версия 4.4.23
- дерево v1.7.0
1 ответ
-I
обратная сторона -P
... руководство дает больше информации о том, что приемлемо для последнего:
https://linux.die.net/man/1/tree
-P pattern
Список только те файлы, которые соответствуют шаблону подстановки.
Примечание: вы должны использовать
-a
возможность также рассмотреть эти файлы, начинающиеся с точки.
для сопоставления.Допустимые подстановочные операторы
*
(любой ноль или более символов),?
(любой отдельный символ),[...]
(любой отдельный символ, указанный в скобках (необязательно)-
(тире) для диапазона символов может использоваться: например:[A-Z]
), а также[^...]
(любой отдельный символ, не указанный в скобках) и|
отделяет альтернативные шаблоны.
Там нет упоминания синтаксиса расширения скобки оболочки {a,b}
... Это расширение обрабатывается tree
не bash
,
И, к сожалению, вы не можете указать -I
многократно...
Вместо этого вам нужно перечислить полные шаблоны с трубкой (|
) разделить их:
tree -I '*.svg|*.png'
Обратите внимание на использование одинарных кавычек для предотвращения расширения звездочкой в оболочке (*
) или переменные (введенные долларом - $
).
Обратите также внимание, что даже невозможно принудительно использовать расширение скобки оболочки, как показано ниже:
$ tree -I '*.'{svg,png}
+ tree -I '*.svg' '*.png'
*.png [error opening dir]