Como excluir múltiplas extensões de arquivos na árvore?

2

Ao usar o comando tree, eu gostaria de excluir a listagem *.png e *.svg da saída. O problema é que toda expansão de colchetes que eu tento não funciona. É por causa de como os argumentos de linha de comando dos processos de árvore?

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}'

Especificações:

  • GNU bash, versão 4.4.23
  • árvore v1.7.0
por Hagbard Celine 31.08.2018 / 17:23

1 resposta

4

-I é o inverso de -P ... o manual fornece mais informações sobre o que é aceitável para o último:

link

-P pattern

List only those files that match the wild-card pattern.

Note: you must use the -a option to also consider those files beginning with a dot . for matching.

Valid wildcard operators are * (any zero or more characters), ? (any single character), [...] (any single character listed between brackets (optional - (dash) for character range may be used: ex: [A-Z]), and [^...] (any single character not listed in brackets) and | separates alternate patterns.

Não há menção à sintaxe da expansão da cinta da shell de {a,b} ... Esta expansão é tratada por tree , não bash .

E infelizmente você não pode especificar -I várias vezes ...

Em vez disso, você precisa listar os padrões completos com um canal ( | ) para separá-los:

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

Observe o uso de aspas simples para impedir que o shell expanda o asterisco ( * ) ou as variáveis (introduzidas por um dólar - $ ).

Note também que nem sequer é possível forçar a expansão do suporte do shell, como mostrado abaixo:

$ tree -I '*.'{svg,png}
+ tree -I '*.svg' '*.png'
*.png [error opening dir]
    
por 31.08.2018 / 17:30