En ocasiones seguro te has visto en la necesidad de crear una plantilla de ciertos directorios que tienes en tu ordenador o en tu trabajo. No quieres copiar todo lo que tienes sino solo los directorios que contiene.
Sería algo engorroso tener que ir copiando los nombres e ir creando el árbol de directorios tal cual lo tienes, ya sea para traer información nueva y que sea solo copiarla, o simplemente para tener una plantilla.
¡Nada difícil! En unos pocos pasos tendrás todo listo.
En mi caso lo aré en el directorio de audiovisuales donde tengo música y videos clips
1- Lo primero es realizar un reconocimiento de todo lo que tengo y copiar sus nombres en un documento de texto .txt
find /home/admin/audiovisuales/ -type d > directorios.txt
2- Lo segundo es leer el documento .txt y crear los directorios
xargs -I{} mkdir -p "{}" < directorios.txt
¡Listo!
Ahora les dejo un script completo que uso en mi día a día, para hacer una plantilla que cambia todas las noches.
#!/bin/bash # Lugar en el que se encuentra almacenado todo el contenido. ruta="/home/admin/audiovisuales/HDD_WD/" # Moveré aquí el archivo .txt y crearé la plantilla, de aquí lo elimino todo. rutam="/home/sftpserver/audiovisuales/zplantilla/" # Sitio donde estará publicada la plantilla para los usuarios autorizados. shared="/home/sftpserver/audiovisuales/" # Ejecución de la creación de la plantilla. cd $ruta find Audiovisuales/ -type d > dir.txt mv $ruta/dir.txt $rutam cd $rutam xargs -I{} mkdir -p "{}" < dir.txt mv $rutam/Audiovisuales/* $shared # Eliminando archivos temporales. rm -r $rutam/Audiovisuales rm -r $rutam/dir.txt exit
Lo podemos añadir al cron para que se ejecute todas las noches a las 5:35 A.M.
sudo nano /etc/crontab
# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 35 5 * * * root /home/admin/creardir.sh
También podríamos eliminar los directorios que se encuentren sin nada, para que nos quede más limpio a la hora de realizar la copia, para ello podemos usar el siguiente script
#!/bin/bash # Directorio donde deben quedar los que se encuentren sin nada dir=/home/sftpserver/audiovisuales/ cd $dir # Define la ruta inicial, puede ser cambiada por cualquier otra ruta que necesites DIRECTORIO_INICIAL="${1:-.}" # Encuentra y elimina los directorios vacíos de manera recursiva find "$DIRECTORIO_INICIAL" -type d -empty -delete echo "Directorios vacíos eliminados"
Espero les pueda ser de ayuda como lo ha sido para mí. See you later!