【发布时间】:2016-07-12 17:34:21
【问题描述】:
我的目标是在文件层次结构中搜索某些文本模式,不包括某些文件名模式,然后递归地将匹配的文件复制到名为 confs 的本地目录中。以下脚本完成了这项工作:
#!/bin/bash
export FEXCLUDE="{*edit,*debug,*orig,*BAK,*bak,*fcs,*NOPE,*tomcat,*full.xml,*-ha.xml}";
export SRCDIR=/opt/jboss-as-7.1.1.Final/standalone;
confshow() {
for ii in `grep -rlZ \
--exclude={*edit,*debug,*orig,*BAK,*bak,*fcs,*NOPE,*tomcat,*full.xml,*-ha.xml} \
--exclude-dir={log,tmp,i2b2.war,*.log,*_history,*.old} "<datasource\|username\|password\|user-name" \
$SRCDIR/* | xargs -0 ls {}` ;
do cp --parents $ii confs;
done;
}
但是,排除模式可能需要频繁更新,并且可能需要与其他函数共享,因此我更喜欢将它们全部放在脚本开头声明的变量中。当我执行以下操作时,应该被排除的文件被复制到 confs 目录:
#!/bin/bash
export FEXCLUDE="{*edit,*debug,*orig,*BAK,*bak,*fcs,*NOPE,*tomcat,*full.xml,*-ha.xml}";
export SRCDIR=/opt/jboss-as-7.1.1.Final/standalone;
confshow() {
for ii in `grep -rlZ \
--exclude=$FEXCLUDE \
--exclude-dir={log,tmp,i2b2.war,*.log,*_history,*.old} "<datasource\|username\|password\|user-name" \
$SRCDIR/* | xargs -0 ls {}` ;
do cp --parents $ii confs;
done;
}
知道如何获得所需的行为吗?或者如何查看grep 在通过$FEXCLUDE 参数时看到的内容(echo 没有显示任何错误)?
谢谢。
【问题讨论】:
-
确实很奇怪。由于表达式不需要引号,我想知道您为什么用引号定义 FEXCLUDE 变量。应该没有。值得一试。
标签: linux bash scripting environment-variables