Shell脚本备份目录并检查文件是否存在

Shell脚本备份目录并检查文件是否存在

在将生成的备份文件复制到目录之前,脚本应首先检查以确保不存在同名文件(这是我第一次编写脚本)

#!/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实际工作。如果您想在“将生成的备份文件复制到目录”之前检查该目录中是否存在该文件名,那么您可能应该在运行该 tar 命令之前测试该文件是否存在。例如:/home/abc$filename/home/def

#!/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和中提到的这个答案用于替换字符的所有实例
  • 最后我在 tar 命令中使用了该Backup_file变量,因此如果您更改该变量,只需更改一处即可(绝对推荐)

如果您确实想运行 tar 命令,然后检查文件是否存在,您可能应该 tar 到一个临时位置,以便稍后可以移动它。但是,如果您不打算对 tar 文件执行任何操作(如果同名文件已存在),那么您可能会在发现该文件之前浪费大量时间,因此我认为在运行 tar 命令之前进行检查是更好的选择选项。

相关内容