Como criar arquivos apenas de saída de árvore?

2

tree tem uma opção -d para " List directories only. " . No entanto, não consigo encontrar uma opção para "Listar apenas arquivos". Eu olhei através da página man, mas não consigo encontrar uma opção para listar apenas arquivos.

    
por stiemannkj1 28.09.2015 / 18:17

2 respostas

2

Como outros já disseram nos comentários, listar apenas não diretórios não combina exatamente com a finalidade do comando tree .

No entanto, listar apenas os arquivos no diretório atual não é incomum se você for como eu e preferir usar um personalizado tree over ls (e talvez você tenha alias ls to tree com seus flags e argumentos preferidos.

Aproveitando uma combinação de tree e grep , você obterá o que deseja:

$ tree -F
.
├── file1.txt
├── file5.txt
├── parent_dir1/
│   ├── child_dir/
│   ├── file2.txt
│   └── file3.txt
└── parent_dir2/
    └── child_dir2/
        └── file4.txt

4 directories, 4 files
$ tree -FL 1 | grep -v /$
.
├── file1.txt
├── file5.txt

2 directories, 1 file

O sinalizador 'F' faz com que tree anexe um '/' aos diretórios, e o sinalizador 'v' para grep inverte o padrão fornecido, o que corresponde a todas as linhas que terminam em '/'.

Você notará que mesmo o resumo no final ainda é aplicável, apesar do fato de os diretórios não estarem sendo exibidos.

Quando você sobe mais de um nível, a estrutura da árvore domina e as coisas ficam um pouco estranhas.

$ tree -FL 3 | grep -v /$
.
├── file1.txt
├── file5.txt
│   ├── file2.txt
│   └── file3.txt
        └── file4.txt

4 directories, 4 files

EDITAR

Além disso, se o tipo de saída de árvore quebrada o incomoda (isto é, o fato de que alguns arquivos são prefaciados pelo caractere '├─' em vez do caractere '└─', e a versão de vários níveis parece apenas se desgastar ...), você pode consertar isso classificando os diretórios de saída, primeiro.

$ tree --dirsfirst -FL 1 | grep -v /$
.
├── file1.txt
└── file5.txt

2 directories, 1 file
$ tree --dirsfirst -FL 3 | grep -v /$
.
│   ├── file2.txt
│   └── file3.txt
│       └── file4.txt
├── file1.txt
└── file5.txt
4 directories, 5 files

Acho que isso também torna a estrutura de árvore sem nós mais legível.

    
por 27.06.2016 / 20:25
1

Considere o seguinte comando:

tree -ifF /usr/java/default/jre/lib/images | grep -v '/$'

/usr/java/default/jre/lib/images
/usr/java/default/jre/lib/images/cursors/cursors.properties
/usr/java/default/jre/lib/images/cursors/invalid32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_CopyDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_CopyNoDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_LinkDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_LinkNoDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_MoveDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_MoveNoDrop32x32.gif
/usr/java/default/jre/lib/images/icons/sun-java_HighContrastInverse.png
/usr/java/default/jre/lib/images/icons/sun-java_HighContrast.png
/usr/java/default/jre/lib/images/icons/sun-java_LowContrast.png
/usr/java/default/jre/lib/images/icons/sun-java.png

2 directories, 12 files

Os argumentos -i e -f fazem com que tree produza caminhos completos em cada linha, em vez de indentar. O argumento -F faz com que ele anexe um / aos nomes de diretório, que são filtrados pelo grep invertido ( grep -v '/$' ).

Costumo usar uma variante disso para me ajudar a assistir impacientemente o conteúdo de um diretório de saída (e seus subdiretórios) para a atividade enquanto estiver executando algum outro comando ...

watch exec "tree -ifFsD /var/local/myapp/data | grep -v '/$'"

    
por 02.08.2018 / 18:01

Tags