Diretório de backup do script Shell e arquivo de verificação, se existir

Diretório de backup do script Shell e arquivo de verificação, se existir

Antes de copiar o arquivo de backup resultante para o diretório, o script deve primeiro verificar se já não existe um arquivo com o mesmo nome (esta é a primeira vez que escrevo um 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

Responder1

O tarcomando que você está usando fará o trabalho real de fazer backup do seu /home/abcdiretório $filenameno /home/defdiretório. Se você quiser verificar a existência desse nome de arquivo nesse diretório antes de "copiar o arquivo de backup resultante para o diretório", provavelmente deverá testar a existência do arquivo antes de executar o 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

No entanto, posso sugerir algumas "melhorias":

#!/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
  • Alterei o formato da data para usar ano de 4 dígitos, depois mês e depois dia (minha preferência)
  • Também mudei o nome da variável, conforme apontado por @Nasir
  • pode ser útil para o nome do arquivo de backup mostrar qual área está fazendo backup se você tiver mais de uma área da qual pode fazer backup no mesmo dia, então minha filenamevariável usa a Backup_filevariável, mas substitui todas as instâncias de '/' por '_' (conforme a seção Expansão de parâmetros man bashe conforme mencionado emesta resposta para substituir todas as instâncias de um personagem)
  • finalmente usei a Backup_filevariável no comando tar, então se você alterar a variável, ela só precisará ser alterada em um lugar (definitivamente recomendado)

Se você realmente deseja executar o comando tar e verificar a existência do arquivo, provavelmente deverá usar o tar em um local temporário para poder movê-lo mais tarde. No entanto, se você não fizer nada com o arquivo tar se já existir um arquivo com o mesmo nome, então você pode ter perdido muito tempo antes de descobrir isso, então acho que verificar antes de executar o comando tar é melhor opção.

informação relacionada