Como gerar uma representação ASCII de uma hierarquia de arquivos do Unix?

5

tudo. Eu estou procurando uma maneira rápida e suja para gerar alguns diagramas de alguns diretórios que têm quase, mas não exatamente, a mesma hierarquia, para que eu possa mostrá-los em uma reunião e podemos decidir qual sabor gostamos mais. Eu não estou interessado nos nós "leaf", apenas nos diretórios.

O problema: não quero mexer com o X. Este é um sistema de servidores com o qual lidei inteiramente através do SSH. Então, estou procurando algo que faça layout ASCII, talvez com hífens e canos simples para linhas ou algo assim.

Alguém sabe de tal utilidade? Tenho certeza de que poderia escrever algo, mas é um tipo de projeto tão complicado, com espaçamento e layout de manuseio e tal; Eu realmente gostaria de descobrir que alguém fez isso por mim. Infelizmente, o Google parece não saber de tal coisa ... ou, se o fizer, está escondido sob montes de excelentes explicações visuais da hierarquia de arquivos padrão do Unix. Obrigado!

    
por Jenn D. 21.05.2010 / 02:58

2 respostas

27

Eu usaria tree .

$ tree -d /usr|head -n 12
/usr
|-- X11R6
|   '-- lib
|       '-- X11
|           '-- wily
|-- bin
|   '-- X11 -> .
|-- games
|-- i586-mingw32msvc
|   |-- bin
|   |-- include
|   |   |-- GL
    
por 21.05.2010 / 03:10
3

Se você não tem árvore, você pode usar este comando linux / unix:

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'

Você também pode fazer um script de shell ver detalhes aqui.

Explicação do comando acima:

ls -R lista todos os diretórios, subdiretórios

Explicação ls -R lista todos os arquivos e diretórios recursivamente

ex:

./sys/devices/platform/ag71xx.0/net/eth0:
addr_assign_type  device            iflink            speed


./sys/devices/platform/ag71xx.0/net/eth0/queues:
tx-0

grep ":$" filtra apenas os arquivos que têm : antes do fim da linha,     assim permanece, algo como.

./sys/devices/platform/ag71xx.0/net/eth0:
./sys/devices/platform/ag71xx.0/net/eth0/queues:

Em seguida, uma série de vários comandos é passada usando -e switch para sed

's/:$//' retira toda a trailin :

's/[^-][^\/]*\//--/g' deixa apenas o que está entre / - e substitui cada um por --

o comando restante dois adiciona alguns espaços e um |

O resultado é algo como:

   |-----------eth0
   |-------------queues
    
por 05.08.2014 / 22:10