如何防止tar覆盖现有的归档文件?

8
我每天都使用命令tar -cpvzf ~/Backup/backup_file_name.tar.gz directory_to_backup/在Ubuntu/Linux上备份文件(文件名包含YYYY-MM-DD格式的日期和从a到z的字母-a是此日期的第一个备份,依此类推),但我想创建一个新的归档文件,而不是覆盖已有的归档文件。如何防止tar覆盖现有的归档文件?如果该归档文件已存在,我希望tar不执行任何操作,并(如果可能的话)显示错误消息。
2个回答

9

在操作文件之前检查文件是否存在:

if [ -f ~"/Backup/[backup_file_name].tar.gz" ]; then
    echo "ooops backup file was already here"
    exit
fi
tar -cpvzf ~/Backup/[backup_file_name].tar.gz directory_to_backup/

请注意,如果您想展开波浪线(~),它必须在双引号外部。

更新

谢谢。你知道如何将归档文件名和目录作为命令行参数备份吗?文件名包括完整路径。

您可以使用$1$2等来表示参数。例如:

if [ -f $1 ]; then
    echo "ooops backup file was already here"
    exit
fi
tar -cpvzf $1 $2

然后通过以下方式调用脚本:

./script.sh file backup_dir

谢谢。您知道如何将归档文件名和备份目录作为命令行参数进行设置吗?文件名包括完整路径。 - Uri
你为什么取消了答案的采纳?难道不是用我的答案来创建你自己的项目吗?如果你想得到帮助,请试着心存感激。 - fedorqui
你的答案不完整。看看我下面的答案。如果你改成$1和$2,我可以接受你的答案。 - Uri
1
@RohanKishibe使用$ @,如此答案所述。 - fedorqui
1
@fedorqui "$@"$@更安全!没有引号,$@会将包含空格的任何参数拆分为多个参数。 - undefined
显示剩余4条评论

-1

我创建了文件~/scripts/tar.sh

#!/bin/bash

if [ -f $1 ]; then
    echo "Oops! backup file was already here."
    exit
fi
tar -cpvzf $1 $2 $3 $4 $5

现在我只需要输入:

~/scripts/tar.sh ~/Backup/backup_file_name_`date +"%Y-%m-%d"`_a.tar.gz directory_to_backup/

如果文件不存在,则创建备份文件。


3
@fedorqui已回答了您的问题。您应该将他的回答标记为答案,但您没有这样做,即使您说过您会这样做。 - Gregg
@Gregg 他不明白这是如何工作的... - NotStanding with GoGotaHome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接