Ya comente en el anterior post el por qué necesitaba hacer esto, la cuestion es que lo hice en Windows porque es lo que usan aquí. En este post vamos a ver como hacer lo mismo pero en linux y Mac que es lo que yo más suelo utilizar.
He estado investigando y resulta que el comando tree no esta para estos Sistemas Operativos, o por lo menos no lo he encontrado así que vamos a conseguir lo mismo que con el tree pero usando una combinación de comandos y parametros.
Código y ejemplo después del salto –>
Hay que decir que existe el comando find que ademas de buscar un fichero y hacer alguna acción, nos devuelve la estructura jerarquica del directorio consultado, pero no nos devuelve una estructura parecida al tree de Windows.
$ find prueba/
prueba/
prueba//maki1
prueba//maki1/sfsdfsdfsdfdsf
prueba//maki2
prueba//maki3
…
Navegando por internet encontre una serie de comandos encadenados que nos genera lo que nosotros queremos, este comando es el siguiente:
$ ls -R | grep “:$” | sed -e ‘s/:$//’ -e ‘s/[^-][^\/]*\//–/g’ -e ‘s/^/ /’ -e ‘s/-/|/’
Es un pedazo de comando pero esto nos genera lo siguiente:
|-maki1
|—maki1_1
|—–maki1_1_1
|—sfsdfsdfsdfdsf
|-maki2
|-maki3
…
Vamos a explicar un poquito más que es lo que tiene el comando y de que se compone y cómo hace todo lo que hace.
Lo primero que hay que darse cuenta de que son realmente 3 comandos que estan conectados entre sí por medios de pipes “|”, estos 3 comandos se encargan de:
ls -R -> mostrar un listado del contenido de un directorio, el -R es para darle recursividad, es decir que entre en todos los directorios que cuelgan del directorio en el que estamos.
grep “:$” -> nos permite encontrar ciertas cadenas de texto o patrones en un archivo de texto. En este caso todas aquellas que posean el nombre del directorio en el que estamos realizando la busqueda.
sed -e ‘s/:$//’ -e ‘s/[^-][^\/]*\//–/g’ -e ‘s/^/ /’ -e ‘s/-/|/’ -> es un comando que nos permite editar cadenas de texto de un fichero de entrada. El parametro -e es para ejecutar un script, que es lo que esta a continuación y debe de tener el formato ‘s/regexp/replacement/’ es decir, regexp = a la expresion que estamos buscando para reemplazar, replacement = la expresion que vamos a poner cuando reemplacemos regexp.
Ahora si queremos guardar lo que nos genere estos comandos a un archivo, simplemente añadimos “> nombre de archivo” y ya tenemos listo el sistema para guardar el arbol de directorios en un fichero.
$ ls -R | grep “:$” | sed -e ‘s/:$//’ -e ‘s/[^-][^\/]*\//–/g’ -e ‘s/^/ /’ -e ‘s/-/|/’ > lista_directorio.txt
Saludos a todos y espero que os sirva de utilidad….
PD: Tened en cuenta el tema de los permisos y todo eso, si quereis hacer esto desde la raiz seguramente vais a tener que hacerlo con permisos de superususario, es decir:
$ sudo ls -R | grep “:$” | sed -e ‘s/:$//’ -e ‘s/[^-][^\/]*\//–/g’ -e ‘s/^/ /’ -e ‘s/-/|/’ > lista_directorio.txt
Bye bye…