创建带有时间戳的 zip 文件

创建带有时间戳的 zip 文件

我一直在尝试创建一个脚本,用时间戳压缩目录并将其移动到同一服务器上的另一个位置,但我似乎无法让 TESTDATE 显示在 zip 文件上,导致文件名为 .zip。

#!/bin/sh

# date
TESTDATE="date +%b-%d-%y"

# dirs to backups
DIRS="/volume1/NetBackup"

# Save zip file elsewhere on the server
DEST="/volume1/NetBackup/Backup"

# set to "no" keep old zip file and add new file
DELETE_OLD_ZIP_FILES="no"

#Path to binary files
BASENAME=/usr/bin/basename
ZIP=/usr/syno/bin/zip

for d in $DIRS
do
echo $DIRS
    zipfile="${DEST}/$(${TESTDATE} ${d} ${BASENAME}).zip"
    echo -n "Creating $zipfile..."
            # create zip file
                ${ZIP} -r $zipfile $d &>/dev/null && echo "Done!"
                done

答案1

您在那里遇到了各种各样的问题。

  • 首先,您需要将命令的结果赋值date +%b-%d-%yTESTDATE变量。为此,您需要使用命令替换

    TESTDATE=$(date  +%b-%d-%y)
    

    您的脚本当前正在执行的操作是将字符串分配date +%b-%d-%yTESTDATE,而不是命令的结果。您可以通过运行以下命令进行测试:

    TESTDATE="date +%b-%d-%y"
    echo $TESTDATE 
    

    这将打印date +%b-%d-%y

  • 其次,您在不应该使用命令替换的地方使用了命令替换,您想要的是:

      zipfile="${DEST}/${TESTDATE} ${d} ${BASENAME}.zip"
    

    所以,你不需要括号。我也不知道你想用basename它做什么。basename是一个默认程序,你不需要将它放在变量中才能使用它。上面的命令将 zipfile 设置为/volume1/NetBackup/Backup/${TESTDATE} ${d} /usr/bin/basename无效文件名。如果你解释一下你想用 basename 做什么,我可能会有所帮助,但就目前而言,这毫无意义。

  • 您似乎认为那DIRS是一个列表,但事实并非如此,它只是一个目录/volume1/NetBackup

  • 另一点是风格问题。您应该始终避免使用大写变量名,因为环境变量都是大写的,如果您使用相同的名称,这可能会导致问题。

反正,如果我明白您在这里想要做什么,您可以像这样编写脚本(我已将其做成dirs数组,因为我认为这就是您想要的):

#!/usr/bin/env bash

# date
testdate=$(date +%b-%d-%y)

# dirs to backup
dirs=("/volume1/NetBackup" "/volume1/foobar")

# Save zip file elsewhere on the server
dest="/volume1/NetBackup/Backup"

# set to "no" keep old zip file and add new file
delete_old_zip_files="no"

#Path to binary files
zip=/usr/syno/bin/zip

base=$(/usr/bin/basename ${dest})
echo "bb $base";

for d in ${dirs[@]}
do
    ## I assume this is what you wanted to do, it will just
    ## return the name of the current $d directory
    base=$(/usr/bin/basename ${d})
    zipfile="${dest}/${testdate} ${base}.zip"
    echo -n "Creating $d $zipfile..."
    # create zip file
    ${zip} -r $zipfile $d  && echo "Done!" || echo ""
done

上面的示例脚本将创建/volume1/NetBackup/Backup/Mar-05-14 NetBackup.zip/volume1/NetBackup/Backup/Mar-05-14 foobar.zip。顺便说一句,我还强烈建议您避免创建带有空格的文件名,您稍后会感谢我。

相关内容