comando em árvore para várias inclusões e exclusões

33

Você poderia me dar um exemplo do uso do comando tree para filtrar o resultado da seguinte maneira:

  • ignorar diretórios (digamos bin, unitTest)
  • única listagem de determinados arquivos com extensões (digamos .cpp, .c, .hpp, .h)
  • fornecendo nomes de caminho completos apenas dos arquivos resultantes que correspondem aos critérios.
Linda
fonte

Respostas:

54

Uma maneira é usar padrões com as opções -Ie -P:

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

Ele -fimprime o caminho completo para cada arquivo e -Iexclui os arquivos no padrão aqui separados por uma barra vertical. A -Popção inclui apenas os arquivos listados no padrão que correspondem a uma determinada extensão.


fonte
6
Nota: não inclua barras à direita na bandeira -I, por exemplo -I bin, não -I bin/.
ThorSummoner
isso faz com que um errosed: illegal option -- I
François Romain
4

use finde treecomando que é use find's prunepara excluir diretórios de pesquisa e use tree -Ppara pesquisar o padrão.

Use a opção de remoção, por exemplo, se você deseja excluir o miscdiretório, basta adicionar a -path ./misc -prune -oao seu comando find.

por exemplo. find . -path ./misc -prune -o -exec tree -P <pattern> {} \;ou você pode usar-name "*.cpp" in find

para excluir vários diretórios, use

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

harish.venkat
fonte
Para mim, o exemplo com find dá o erro "find: espera uma expressão após '-o'"
WebComer 18/11/18
você tentou apenas find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -ooufind . -path ./misc -prune -o -exec tree -P *.cpp {} \;
harish.venkat 28/11
2

A verdadeira solução é gerar caminhos completos, filtrar caminhos indesejados e finalmente corrigir as saídas.

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

Se todos os arquivos forem necessários na saída, remova o parâmetro "d".

Uma explicação detalhada pode ser encontrada em: http://qaon.net/press/archives/572 se você puder entender japonês.

Afante
fonte
-f flag super útil!
Michael Dimmitt