Linux bash脚本中Tar的使用

Linux bash脚本中Tar的使用,linux,bash,tar,Linux,Bash,Tar,我有以下目录结构: /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

我有以下目录结构:

/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/*"  *
因此,在存档untar后,我得到了以下目录结构:

/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/*\"
"
备份\u 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\u列表更改为:

EXCLUDE_LIST=(
        --exclude 'logs/*'
        --exclude 'servers/*/logs/*'
        --exclude 'installer_logs/*'
)
然后像这样展开它:

tar -czhf ... --anchored  "${EXCLUDE_LIST[@]}" *
您现在所做的工作不起作用的原因是因为EXCLUDE_LIST正在被导出到
--EXCLUDE“logs/*”..
。双引号不会被删除,并且仍然是参数的一部分,因此该模式不匹配任何内容,因为您没有任何文件或目录的名称中包含双引号