Cria uma saída 'tree' a partir da lista de arquivos

0

Eu tenho uma grande lista de diretórios e nomes de arquivos no formato

drwxr-sr-x hamiltont/hamiltont 0 2015-03-11 23:54 Archive/Directory One/Subdir/
-rw-r--r-- hamiltont/hamiltont 21799 2014-01-10 12:52 Archive/Directory One/Subdir/file2.txt
-rw-r--r-- hamiltont/hamiltont 21799 2014-01-10 12:52 Archive/Directory One/Subdir/file3.txt
-rw-r--r-- hamiltont/hamiltont 21799 2014-01-10 12:52 Archive/Directory One/Subdir Two/somefile.txt
-rw-r--r-- hamiltont/hamiltont 21799 2014-01-10 12:52 Archive/Directory Two/Subdir Something/somefile.txt
-rw-r--r-- hamiltont/hamiltont 21799 2014-01-10 12:52 Archive/Directory Other/Subdir/somefile.txt

E gostaria de criar a saída padrão tree . Especificamente, apenas mostrando diretórios e apenas abaixo do nível 3, e. tree -L 3 -d :

├── Directory\ One
│   ├── Subdir
├── Directory\ Two
│   ├── Subdir
│   ├── Subdir\ Something
│   └── Subdir\ Two
├── Directory\ Other
│   └── Subdir

Eu posso conseguir isso com um script decentemente complexo, mas estou suspeitando que há uma maneira mais fácil

    
por Hamy 17.06.2017 / 20:16

1 resposta

0

Aqui está minha própria resposta, mas provavelmente improvável:

# Find all lines with directories
# Remove all ls output before the path is listed
# Recreate the directory tree
grep '^d' archive_filelist.txt | sed 's|.*Archive\(.*\)|\"Archive\"|' | xargs mkdir -p
# Use tree as you would normally
tree -L 2 -d Archive

A lista de diretórios é um arquivo enorme (mais de 200 GB), então essa abordagem demora um pouco

    
por 17.06.2017 / 20:33