Listado de todos los archivos del PC -> a un archivo….. En Mac y Linux

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…

About admin