如何防止此bash脚本将日期附加到它所做的备份?

时间:2012-03-07 21:58:43

标签: bash sh

这是一个Minecraft初始化脚本。我试图让它不将日期附加到备份zip文件或tar文件,日期是从“datepath”函数给出的。但是,我不想完全删除datepath函数,因为它是其他函数所需要的。我不熟悉bash脚本,是否有人熟悉bash谁可以提供帮助?不应该花很长时间。

mc_world_backup() {
    get_worlds
        today="" # If you don't want a folder for each day change to today=""
    for INDEX in ${!WORLDNAME[@]}
    do
        echo "Backing up minecraft ${WORLDNAME[$INDEX]}"

        case "$BACKUPFORMAT" in
            tar)
                path=`datepath $BACKUPPATH/${WORLDNAME[$INDEX]} .tar.bz2 .tar.bz2`
                as_user "tar -hcjf $path $MCPATH/${WORLDNAME[$INDEX]}"
                ;;
            zip)
                path=`datepath $BACKUPPATH/${WORLDNAME[$INDEX]} .zip .zip`
                as_user "zip -rq $path $MCPATH/${WORLDNAME[$INDEX]}"
                ;;
            *)
                echo "$BACKUPFORMAT is no supported backup format"
                ;;
        esac
    done
}

2 个答案:

答案 0 :(得分:1)

根据另一个答案的讨论中的新信息:

如果我们的变量$path包含"world_03/07/2012.tar",我们可以将其转换为"world.tar"

path="${path%_??/??/????.tar}.tar"  # quotes not needed if path has no spaces

_??/??/????.tar模式匹配后缀_03/07/2012.tar和其他类似模式。您可以通过限制为数字来使其更严格:_[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9].tar。这可能是不必要的,因为字符串来自具有已知的统一输出的函数。

答案 1 :(得分:0)

为什么文件后缀的两个副本传递给datepath?它会接受空字符串吗?如果是这样,那么日期是否只是路径字符串的后缀?在这种情况下,它可以被删除,同时用后缀替换,使用shell参数扩展,如

path=`datepath ... "" ""`
# remove a suffix portion matching <SUITABLE_PATTERN> and append .zip.
path=${path%<SUITABLE_PATTERN>}.zip
as_user "zip ..."

要知道如何删除日期,需要一个示例。 $ {VAR%PAT}后缀删除语法适用于shell globs。例如$ {VAR%[0-9]?}将从字符串中删除类似3X的后缀,但不删除XY(因为X不是数字)。