在将生成的备份文件复制到目录之前,脚本应首先检查以确保不存在同名文件(这是我第一次编写脚本)
#!/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 命令之前进行检查是更好的选择选项。