2010-08-11 9 views
329

¿Hay alguna comandos de Linux que puedo llamar desde un script Bash que imprimirá la estructura de directorios en forma de un árbol, por ejemplo,de comandos de Linux a la estructura de directorios de impresión en forma de un árbol

folder1 
    a.txt 
    b.txt 
folder2 
    folder3 
+7

Sólo tiene que ejecutar 'find'. O 'encontrar. -not -path '*/\. *' 'para ocultar archivos y carpetas comenzando con' .'. Si desea tener resultados con espacios, como en la pregunta, úselo con este script "find prettifier": 'find. -not -path '*/\. *' | python -c "import sys as s; sa = []; [setattr (s, 'a', list (filtro (lambda p: c.startswith (p + '/'), sa))) o (s.stdout. write ('' * len (sa) + c [len (sa [-1]) + 1 si es más 0:]) o True) y saappend (c [: - 1]) para c en s.stdin] "' – user

+5

¿No deberían migrar tales preguntas al SuperUser en lugar de cerrarse? – Balmipour

+1

@Balmipour: Quizás deberían. Pero "solo se pueden migrar las preguntas que tienen menos de 60 días" ([¿Qué es la migración y cómo funciona?] (Http://meta.stackexchange.com/a/10250/248863)). No me preguntes por qué. – user

Respuesta

550

es esto lo que busca tree, debe ser en la mayoría de las distribuciones (tal como una instalación opcional)?

~> tree -d /proc/self/ 
/proc/self/ 
|-- attr 
|-- cwd -> /proc 
|-- fd 
| `-- 3 -> /proc/15589/fd 
|-- fdinfo 
|-- net 
| |-- dev_snmp6 
| |-- netfilter 
| |-- rpc 
| | |-- auth.rpcsec.context 
| | |-- auth.rpcsec.init 
| | |-- auth.unix.gid 
| | |-- auth.unix.ip 
| | |-- nfs4.idtoname 
| | |-- nfs4.nametoid 
| | |-- nfsd.export 
| | `-- nfsd.fh 
| `-- stat 
|-- root ->/
`-- task 
    `-- 15589 
     |-- attr 
     |-- cwd -> /proc 
     |-- fd 
     | `-- 3 -> /proc/15589/task/15589/fd 
     |-- fdinfo 
     `-- root ->/

27 directories 

muestra tomada de la página web de maintainers.

Puede agregar la opción -L # donde # se reemplaza por un número, para especificar el nivel máximo de recursividad.

Eliminar -d para mostrar también archivos.

+42

Nota para cualquier visitante que vea esto: ¡elimine '-d' para mostrar archivos también! – default

+10

Usando Ubuntu v12.04, esto no fue preinstalado. – gbmhunter

+2

No se instaló en CentOS 6 tampoco, pero un rápido 'yum install tree' lo consiguió. – Adam

199

Puede usar este:

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

Muestra una representación gráfica de los subdirectorios actuales, por ej. en/var/cache/:

. 
    |-apache2 
    |---mod_cache_disk 
    |-apparmor 
    |-apt 
    |---archives 
    |-----partial 
    |-apt-xapian-index 
    |---index.1 
    |-dbconfig-common 
    |---backups 
    |-debconf 

Source

+5

Si lo quiere con espacios, más como el OP solicitado, entonces esto: 'ls -R | grep ": $" | sed -e 's /: $ //' -e 's/[^ -] [^ \ /] * \ ///g' -e 's/^//' ' – Ben

+0

de cualquier forma que pueda hacer que esto pase por alto dotfiles? P.ej. evitar que liste el contenido de '.git'? – GMA

+0

@GeorgeMillo ver [mi comentario] (http://stackoverflow.com/questions/3455625/linux-command-to-print-directory-structure-in-the-form-of-a-tree#comment37392136_3455625) – user

9

Para añadir la solución de Hassou a tu .bashrc, probar:

alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e 
      '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'" 
+5

Tenga cuidado con el carácter de nueva línea al final de la primera línea si lo copia directamente – Rahul

Cuestiones relacionadas