我一直在尝试创建一个脚本,用时间戳压缩目录并将其移动到同一服务器上的另一个位置,但我似乎无法让 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-%y
给TESTDATE
变量。为此,您需要使用命令替换:TESTDATE=$(date +%b-%d-%y)
您的脚本当前正在执行的操作是将字符串分配
date +%b-%d-%y
给TESTDATE
,而不是命令的结果。您可以通过运行以下命令进行测试: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
。顺便说一句,我还强烈建议您避免创建带有空格的文件名,您稍后会感谢我。