Creando árboles

Una de las cosas por las que se suele trabajar en un ambiente gráfico es por la utilidad de la interfaz para presentar la estructura de directorios de manera que pueda abarcarse fácilmente la mayor parte de ésta y su contenido. Esto es algo que se extraña cuando uno debe trabajar desde la línea de comandos, a través de un emulador de terminal.

Sin embargo, una presentación arbórea de la estructura de directorios puede ser lograda con el entubamiento de algunos comandos, por ejemplo:

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

que permite obtener algo como:

/Applications> ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e ' 
 |-Address Book.app
 |---Contents
 |-----MacOS
 |-----Resources
 |-------AddressBook.help
 |---------Contents
 |-----------Resources
 |-------------Dutch.lproj
 |---------------pgs
 |---------------sty
 |---------------xpgs
 |-------------English.lproj
 |---------------pgs
 |---------------sty
 |---------------xpgs
 |-------------French.lproj
...

Una presentación mucho más pulida puede ser obtenida con

find . -type d -print 2>/dev/null | awk '!/\.$/ {for( i=1;i<NF;i++ ){d=(d<3&&i!=1)?3:length($i); printf("%"d"s","|")} print "---"$NF}' FS='/'

y que permite obtener algo como:

/Applications> tf("%"d"s","|")}print "---"$NF}' FS='/'
|---.install4j<
|---Address Book.app
|  |---Contents
|  |       |---_CodeSignature
|  |       |---MacOS
|  |       |---Resources
|  |       |        |---AddressBook.help
|  |       |        |               |---Contents
|  |       |        |               |       |---Resources
|  |       |        |               |       |        |---da.lproj
|  |       |        |               |       |        |       |---pgs
|  |       |        |               |       |        |       |---sty
|  |       |        |               |       |        |       |---xpgs
|  |       |        |               |       |        |---Dutch.lproj
|  |       |        |               |       |        |          |---pgs
|  |       |        |               |       |        |          |---sty
|  |       |        |               |       |        |          |---xpgs
|  |       |        |               |       |        |---English.lproj
|  |       |        |               |       |        |            |---pgs
|  |       |        |               |       |        |            |---sty
|  |       |        |               |       |        |            |---xpgs
|  |       |        |               |       |        |---fi.lproj
|  |       |        |               |       |        |       |---pgs
|  |       |        |               |       |        |       |---sty
|  |       |        |               |       |        |       |---xpgs
|  |       |        |               |       |        |---French.lproj
|  |       |        |               |       |        |           |---pgs
|  |       |        |               |       |        |           |---sty
|  |       |        |               |       |        |           |---xpgs
|  |       |        |               |       |        |---German.lproj
|  |       |        |               |       |        |           |---pgs
|  |       |        |               |       |        |           |---sty
|  |       |        |               |       |        |           |---xpgs
...
Stuart Franklin, Reserva Forestal de Kepong. Coronas de árboles «Kapur» (Dryobalanops aromatica) Malaysia 1997.

Si la indentación (el valor de d en el script AWK) resulta demasiado excesiva, puede usarse la siguiente versión del comando:

find . -type d -print 2>/dev/null | awk '!/\.$/ {for( i=1;i<NF;i++ ){d=3; printf("%"d"s","|")} print "--"$NF}' FS='/'

El funcionamiento de estos comando puede variar de versión a versión de unix. Yo lo he podido probar usando el shell Korn y Bourne en HP-UX, así como su versión para Mac OS X 10.5 y 10.6, donde también se ha podido validar con los shells Z y BASH.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.