Script de Bash de copia de seguridad de todos los archivos .txt de un directorio

En sistemas operativos como Linux, la extensión .bak se utiliza habitualmente para denotar una copia de seguridad de un archivo. Cuando un programa está a punto de sobrescribir un archivo existente, puede crear una copia del archivo original y añadir .bak al nombre del archivo. Esto permite recuperar el contenido original en caso de que la escritura falle y corrompa el archivo, lo cual podría ocurrir debido a un fallo del sistema operativo, un corte de energía o la falta de espacio en disco.

Por ejemplo, si tienes un archivo llamado documento.txt y haces una copia de seguridad, el archivo de copia de seguridad se llamará documento.txt.bak. De esta manera, si algo sale mal durante la modificación del archivo original, puedes restaurar el archivo original desde la copia de seguridad.

Vamos a hacer un script que realice una copia de seguridad de todos los archivos .txt en el directorio especificado, añadiendo la extensión .bak a cada copia. Aquí va el script de bash:

#!/bin/bash

# Verifica si se ha proporcionado un directorio como argumento
if [ -z “$1” ]; then
echo “Por favor, proporciona un directorio.”
exit 1
fi

# Itera sobre todos los archivos .txt en el directorio especificado
for filename in $1/*.txt
do
# Crea una copia de seguridad del archivo con la extensión .bak
cp “$filename” “$filename.bak”
done

echo “Copia de seguridad completada.”

Explicando el script:

#!/bin/bash:  Especifica que el script debe ejecutarse con el intérprete de Bash.

if [ -z “$1” ]; then … fi
: Esta línea verifica si el primer argumento pasado al script ($1) está vacío. El  -z es una opción de prueba en Bash que significa “cadena vacía”. En otras palabras, -z “$1” devuelve verdadero si $1 es una cadena vacía.

echo “Por favor, proporciona un directorio.”
:  Si la condición anterior es verdadera (es decir, si no se proporcionó ningún argumento), esta línea imprime un mensaje en la terminal pidiendo al usuario que proporcione un directorio.

exit 1
: Esta línea termina la ejecución del script con un código de salida `1`, que generalmente indica un error. Esto es útil para detener el script si no se ha proporcionado el argumento necesario.

fi
: Esta línea marca el final del bloque if.

Así, esta parte del script se asegura de que el usuario proporcione un directorio como argumento al ejecutar el script. Si no se proporciona, el script muestra un mensaje de error y se detiene.

for filename in $1/*.txt: Este comando inicia un bucle for que itera sobre todos los archivos con extensión .txt en el directorio especificado por $1. $1 es un parámetro que se pasa al script cuando se ejecuta.

do
: Indica el inicio del bloque de comandos que se ejecutarán para cada archivo encontrado.

cp $filename $filename.bak
: Este comando copia el archivo actual ($filename) y crea una copia con la extensión .bak. Por ejemplo, si el archivo se llama documento.txt, la copia se llamará documento.txt.bak.

done:
Indica el final del bucle for.

echo “Copia de seguridad completada.”
: Muestra un mensaje indicando que la copia de seguridad se ha completado.

Guarda este código en un archivo, por ejemplo, backupTxt.sh, y luego puedes ejecutarlo desde la línea de comandos proporcionando el directorio como argumento. Recuerda darle permisos de ejecución al script:
sudo chmod +x backupTxt.sh

Para ejecutarlo:


./backupTxt.sh ruta_del_directorio

Sustituye ruta_del_directorio por el directorio en el que están los archivos .txt y quieras realizar la copia de seguridad (extensión txt.bak).

script_bash