Creación de directorios mediante Script

Creación de directorios mediante Script

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#!/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
#!/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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo nano /etc/crontab
sudo nano /etc/crontab
sudo nano /etc/crontab
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# 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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#!/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"
#!/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!

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *