这是一个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
}
答案 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不是数字)。