древовидная команда для нескольких включений и исключений

33

Не могли бы вы дать мне пример использования команды дерева для фильтрации результатов следующим образом:

  • игнорировать каталоги (скажем bin, unitTest)
  • только перечисляя определенные файлы , имеющие расширения (например .cpp, .c, .hpp, .h)
  • предоставляя полные пути только для результирующих файлов, соответствующих критериям.
Линда
источник

Ответы:

54

Одним из способов является использование шаблонов с -Iи -Pпереключатели:

tree -f -I "bin|unitTest" -P "*.[ch]|*.[ch]pp." your_dir/

-fПечатает полный путь для каждого файла, и -Iисключает файлы в шаблоне здесь разделены вертикальной чертой. В -Pпереключателе включает все только файлы , перечисленные в шаблоне , совпадающий с определенным расширением.


источник
6
Примечание: не включайте косые черты в ваш флаг -I, например -I bin, нет -I bin/.
ThorSummoner
это делает ошибкуsed: illegal option -- I
Франсуа Ромен
4

используйте findи treeкоманду, которая использует find, pruneчтобы исключить каталоги поиска и использовать tree -Pдля поиска шаблона.

Используйте переключатель prune, например, если вы хотите исключить miscкаталог, просто добавьте a -path ./misc -prune -oв команду find.

например, find . -path ./misc -prune -o -exec tree -P <pattern> {} \;или вы можете использовать-name "*.cpp" in find

для исключения использования нескольких каталогов

find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o

harish.venkat
источник
Для меня пример с find дает ошибку "find: ожидается выражение после '-o'"
WebComer
ты пробовал просто find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -oилиfind . -path ./misc -prune -o -exec tree -P *.cpp {} \;
harish.venkat
2

Истинным решением является вывод полных путей, фильтрация нежелательных путей и, наконец, исправление выходных данных.

tree -df | egrep -v "\./(bin|unitTest)/.*" | sed -r 's%\./.*/%%g'

Если все файлы необходимы в выводе, удалите параметр «d».

Подробное объяснение можно найти по адресу: http://qaon.net/press/archives/572, если вы понимаете японский.

Afante
источник
-ф флаг супер полезен!
Майкл Диммитт