Directorio de copia de seguridad del script de Shell y verifique el archivo si existe

Directorio de copia de seguridad del script de Shell y verifique el archivo si existe

Antes de copiar el archivo de copia de seguridad resultante al directorio, el script primero debe verificar que no haya un archivo con el mismo nombre (esta es la primera vez que escribo un script).

#!/bin/bash

time=$(date +%m-%d-%y)
Backup_file=/home/abc
Dest=/home/def
filename=back-$time.tar.gz

tar -czf $Dest/$filename /home/abc
read $file

if [ -f $file ]; then
      echo "Error file $file already exist!"
else
      mv $file /home/def
fi

Respuesta1

El tarcomando que está utilizando hará el trabajo real de hacer una copia de seguridad de su /home/abcdirectorio $filenameen el /home/defdirectorio. Si desea verificar la existencia de este nombre de archivo en ese directorio antes de "copiar el archivo de respaldo resultante al directorio", entonces probablemente debería probar la existencia del archivo antes de ejecutar ese comando tar. Como:

#!/bin/bash

time=$(date +%m-%d-%y)
Backup_file=/home/abc
Dest=/home/def
filename=back-$time.tar.gz

if [ -f $filename ]; then
  echo "Error file $filename already exist!"
else
  tar -czf $Dest/$filename /home/abc
fi

Sin embargo, podría sugerir algunas "mejoras":

#!/bin/bash

today=$(date +%Y-%m-%d)
Backup_file=/home/abc
Dest=/home/def
filename=back-${Backup_file//\//_}-${today}.tar.gz

if [ -f ${filename} ]; then
  echo "Error file ${filename} already exists!"
else
  tar -czf ${Dest}/${filename} ${Backup_file}
fi
  • Cambié el formato de fecha para usar año de 4 dígitos, luego mes y luego día (mi preferencia)
  • También cambié el nombre de la variable, como lo señaló @Nasir.
  • Puede ser útil que el nombre del archivo de respaldo muestre de qué área se está respaldando si tiene más de un área de la que podría respaldar el mismo día, por lo que mi filenamevariable usa la Backup_filevariable, pero reemplaza todas las instancias de '/' con '_' (según la sección Expansión de parámetros de man bashy como se menciona enesta respuesta para reemplazar todas las instancias de un personaje)
  • finalmente he usado la Backup_filevariable en el comando tar, por lo que si cambia la variable, solo es necesario cambiarla en un lugar (definitivamente recomendado)

Si realmente desea ejecutar el comando tar y luego verificar la existencia del archivo, probablemente debería colocarlo en una ubicación temporal para poder moverlo más tarde. Sin embargo, si no va a hacer nada con el archivo tar si ya existe un archivo con el mismo nombre, es posible que haya perdido mucho tiempo antes de descubrirlo, por lo que creo que verificar antes de ejecutar el comando tar es una mejor opción. opción.

información relacionada