建立帶有時間戳記的 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無效檔名。如果你解釋一下你想用基本名稱做什麼,我也許可以提供幫助,但事實上它是沒有意義的。

  • 您似乎認為這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。順便說一句,我還強烈建議您避免創建帶有空格的文件名,稍後您會感謝我的。

相關內容