2016-02-18 35 views
2

我有以下目录结构:焦油使用在bash脚本

/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脚本这是SUP提出做同样的和没有运气, 这里是我的代码:

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来做。

回答

0

尝试改变EXCLUDE_LIST到:

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

然后展开这样说:

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

之所以你现在正在做不工作是因为EXCLUDE_LIST被用不了两年时间来--exclude "logs/*" ...。双引号不会被删除并保留为参数的一部分,因此该模式不匹配任何内容,因为您的名称中没有任何文件或目录带有双引号。

+0

它的工作原理!非常感谢你 – cubatura