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
find /home/admin/audiovisuales/ -type d > directorios.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
xargs -I{} mkdir -p "{}" < directorios.txt
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.
# 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.
find Audiovisuales/ -type d > dir.txt
xargs -I{} mkdir -p "{}" < dir.txt
mv $rutam/Audiovisuales/* $shared
# Eliminando archivos temporales.
rm -r $rutam/Audiovisuales
#!/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
#!/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
# 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
# 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
# Directorio donde deben quedar los que se encuentren sin nada
dir=/home/sftpserver/audiovisuales/
# 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"
#!/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"
#!/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!