Скрипт оболочки создает резервную копию каталога и проверяет файл, если он существует

Скрипт оболочки создает резервную копию каталога и проверяет файл, если он существует

Перед копированием полученного файла резервной копии в каталог скрипт должен сначала проверить, не существует ли файла с таким же именем (это мой первый опыт написания скрипта).

#!/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

решение1

Команда, tarкоторую вы используете, выполнит фактическую работу по резервному копированию вашего /home/abcкаталога $filenameв /home/defкаталог. Если вы хотите проверить наличие этого имени файла в этом каталоге перед "копированием полученного файла резервной копии в каталог", то вам, вероятно, следует проверить наличие файла перед запуском команды tar. Например:

#!/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

Однако я мог бы предложить несколько «улучшений»:

#!/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
  • Я изменил формат даты, чтобы использовать 4-значный год, затем месяц, затем день (мой выбор).
  • Я также изменил имя переменной, как указал @Nasir.
  • может быть полезно, чтобы имя файла резервной копии показывало, какую область он копирует, если у вас есть более одной области, резервные копии которой вы можете сделать в один и тот же день, поэтому моя filenameпеременная использует Backup_fileпеременную, но заменяет все вхождения '/' на '_' (согласно разделу Расширение параметров man bashи как указано вэтот ответ для замены всех экземпляров символа)
  • наконец, я использовал Backup_fileпеременную в команде tar, так что если вы измените переменную, ее нужно будет изменить только в одном месте (определенно рекомендуется)

Если вы действительно хотите запустить команду tar, а затем проверить наличие файла, вам, вероятно, следует tar во временное местоположение, чтобы вы могли переместить его позже. Однако, если вы не собираетесь ничего делать с файлом tar, если файл с таким же именем уже существует, то вы могли бы потратить много времени, прежде чем выяснить это, поэтому я думаю, что проверка перед запуском команды tar — лучший вариант.

Связанный контент