我一直在嘗試建立腳本,該腳本壓縮帶有時間戳記的目錄並將其移動到同一伺服器上的另一個位置,但我似乎無法讓 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
無效檔名。如果你解釋一下你想用基本名稱做什麼,我也許可以提供幫助,但事實上它是沒有意義的。您似乎認為這
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
。順便說一句,我還強烈建議您避免創建帶有空格的文件名,稍後您會感謝我的。