簡體   English   中英

bash腳本中的Tar用法

[英]Tar usage in bash script

我有以下目錄結構:

/test_dir/logs:
            admin-access.log
            admin-access.log00001
            admin-access.log00002
            admin-access.log00003
            admin-access.log00004
            admin-access.log00005

/test_dir/installer_logs:
            AITimeListener.log
            installer.log


/test_dir/servers/clust1/logs/:
            clust1.out
            clust1.out00001
            clust1.out00002
            clust1.out00003
            clust1.out00004

我正在使用以下命令集將文件夾排除在外:

cd /test_dir/
tar -czhf /backup/test_dir_node01_2016-02-19_initial.tgz --anchored --exclude "logs/*" --exclude "servers/*/logs/*" --exclude "installer_logs/*"  *

結果,在歸檔解壓縮后,我得到了以下目錄結構:

/backup/logs:
          no files here

/backup/installer_logs:
          no files here

/backup/servers/clust1/logs/:         
           no files here

我正在嘗試編寫應該執行相同且沒有運氣的bash腳本,這是我的代碼:

backup.parameters文件:

NC_HOME=/test_dir
BACKUP_HOME=/backup

EXCLUDE_LIST="
        --exclude \"logs/*\"
        --exclude \"servers/*/logs/*\"
        --exclude \"installer_logs/*\"
"

backup_initial.sh文件

#!/bin/bash

if [ ! -f backup.parameters ]; then echo "backup.parameters file not found! exiting...."; exit 1; fi
. ./backup.parameters

TAR_ARGS="czf"
DATE=`date +%F`
HOSTNAME=`hostname`

cd $NC_HOME
echo "Initial backup  started on $HOSTNAME at `date \"+%F %T\"`"
tar -czhf $BACKUP_HOME/$(basename $NC_HOME)_"$HOSTNAME"_"$DATE"_initial.tgz --anchored  $EXCLUDE_LIST *
echo "Initial backup finished on $HOSTNAME at `date \"+%F %T\"`"
echo "Initial backup location: $BACKUP_HOME/$(basename $NC_HOME)_"$HOSTNAME"_"$DATE"_initial.tgz"

解壓縮由腳本創建的存檔后,我看到排除目錄中仍然有文件:

/backup/logs:
            admin-access.log
            admin-access.log00001
            admin-access.log00002
            admin-access.log00003
            admin-access.log00004
            admin-access.log00005

/backup/installer_logs:
            AITimeListener.log
            installer.log


/backup/servers/clust1/logs/:
            clust1.out
            clust1.out00001
            clust1.out00002
            clust1.out00003
            clust1.out00004

請幫助我如何對此進行編碼,也請不要建議我使用-X選項。 我真的需要用--exclude來做。

嘗試將EXCLUDE_LIST更改為:

EXCLUDE_LIST=(
        --exclude 'logs/*'
        --exclude 'servers/*/logs/*'
        --exclude 'installer_logs/*'
)

然后像這樣展開它:

tar -czhf ... --anchored  "${EXCLUDE_LIST[@]}" *

您現在無法執行操作的原因是因為EXCLUDE_LIST已被擴展為--exclude "logs/*" ... 雙引號不會被刪除並保留在參數中,因此該模式不匹配任何內容,因為您沒有任何名稱中帶有雙引號的文件或目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM