5/5 - (1 voto)

Introducción

Es muy posible que seas administrador de sistemas y necesites copiar de forma recursiva un árbol de directorios, excluyendo los ficheros que se contienen en él.

Esto puede convertirse en una tarea bastante tediosa e incluso en algunos casos algo demasiado complejo y puede inducir a fallos si se hace manualmente.

Script en bash

Por suerte para nosotros, esto es bastante sencillo de realizar en GNU/Linux con un script en Bash como el que indicamos a continuación y el cuál comentaremos a continuación:

#!/bin/bash

# Get directories
DIRS=($(ls -R | grep ":$" | sed -e 's/:$//'))

# Check args
if [ -z "$1" ]
then
	echo "Debes de introducir una ruta de destino como parámetro"
	echo "Ejemplo: ./tree.sh ~/Escritorio"
else
	echo "Ruta destino: $1"
fi

# Loop for each directory
for i in "${DIRS[@]}"
do
	if [ $i != "." ]
	then
		path=$(echo "$1$i" | sed 's/\/\.//g')
		echo "Se ha creado el directorio: ${path}"
		mkdir -p ${path}
	fi
done

Entrando más en detalles

Con el comando ls -R se obtienen los diectorios recursivamente a partir del directorio de donde ejecutemos el script. El resto de parámetros de la misma sentencia, son para obtener de forma más clara la ruta de cada directorio y subdirectorio. Por último, todos los directorios son almacenados en la variable DIRS.

Una vez obtenidos los directorios, comprobamos que se ha recibido como primer argumento la ruta destino que se utilizará para exportar el árbol de directorios.

Por último, se puede utilizar un bucle for para recorrer cada uno de los directorios encontrados y crearlos en la ruta destino con el comando mkdir.

Comprobando que funciona

Para probar que funciona el script, he creado el siguiente árbol de directorios:

|-- prueba
|---- prueba1
|------ test
|---- prueba2
|---- prueba3 

Y se ha ejecutado el script en bash con el comando ./tree.sh ~/Descargas (aclaración: previamente le he asignado permisos de ejecución con el comando sudo chmod +x tree.sh), y ha generado los siguientes directorios en la carpeta Descargas de mi usuario:

Y dentro de la carpeta prueba1, ha generado también la carpeta test:

Y eso es todo …

Y esto es todo, así que espero que este artículo haya sido de utilidad, sobre todo para administradores de sistemas.


¡Sígueme en mis redes sociales o en mi página web personal!


Deja un comentario