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


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's, pruneщоб виключити каталоги пошуку та використання tree -Pдля пошуку шаблону.

Використовуйте перемикач чорносливу, наприклад, якщо ви хочете виключити miscкаталог, просто додайте -path ./misc -prune -oдо команди пошуку.

напр. 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


Для мене приклад з 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, якщо ви можете зрозуміти японську мову.


-f прапор супер корисний!
Майкл Діммітт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.