【问题标题】:How do I prevent tar from overwriting an existing archive?如何防止 tar 覆盖现有存档?
【发布时间】:2021-03-02 19:29:35
【问题描述】:

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

【问题讨论】:

    标签: linux shell tar


    【解决方案1】:

    事先检查文件是否存在:

    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
    

    【讨论】:

    • 谢谢。您知道如何将存档文件名和目录作为命令行参数进行备份吗?文件名包含完整路径。
    • 可以,可以用$1$2等来表示参数。另外,由于您是新来的,如果您的问题已经解决,请不要忘记将答案标记为已接受。您可以单击答案旁边的复选标记将其从空心切换为绿色。如有任何疑问,请参阅Help Center > Asking
    • 你为什么不接受这个答案?你不是用我的答案来创建你自己的项目吗?如果您想获得帮助,请尽量感激。
    • 您的回答不完整。下面看看我的回答。如果你改成 1 美元和 2 美元,我可以接受你的回答。
    • @RohanKishibe 使用$@,如this answer 中所述。
    【解决方案2】:

    我创建了文件~/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/
    

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

    【讨论】:

    • @fedorqui 确实回答了您的问题。你应该把他的回答标记为你甚至在你说过你会的答案之后。
    • @Gregg 他不明白这是怎么回事...
    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2017-12-19
    • 2021-02-08
    相关资源
    最近更新 更多