如何防止tar覆盖现有存档?

Uri*_*Uri 3 linux shell tar

我使用该命令在Ubuntu/Linux上每天备份文件几次tar -cpvzf ~/Backup/backup_file_name.tar.gz directory_to_backup/(文件名包含YYYY-MM-DD格式的日期和a到z的字母 - a是此日期的第一个备份等)但是我想创建一个新的存档,如果它已经存在,则不会覆盖该存档.如何防止tar覆盖现有存档?如果存档存在,我希望tar退出而不做任何事情(如果可能,显示错误消息).

fed*_*qui 7

事先检查文件是否存在:

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/
Run Code Online (Sandbox Code Playgroud)

请注意,~如果要扩展它,必须在双引号之外.


更新

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

您可以使用$1,$2等等来指示参数.例如:

if [ -f $1 ]; then
    echo "ooops backup file was already here"
    exit
fi
tar -cpvzf $1 $2
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令调用脚本:

./script.sh file backup_dir
Run Code Online (Sandbox Code Playgroud)


Uri*_*Uri -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
Run Code Online (Sandbox Code Playgroud)

现在我只需输入:

~/scripts/tar.sh ~/Backup/backup_file_name_`date +"%Y-%m-%d"`_a.tar.gz directory_to_backup/
Run Code Online (Sandbox Code Playgroud)

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

  • @fedorqui 确实回答了你的问题。您应该将他的回复标记为答案,即使您说过会这样做,但您也没有这样做。 (3认同)