- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的目标是在文件层次结构中搜索某些文本模式,排除某些文件名模式,然后递归地将匹配的文件复制到名为 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
没有显示任何错误)?
谢谢。
最佳答案
大括号扩展非常适合交互式使用,但如果您正在编写脚本,只需使用您的编辑器快速复制必要的 --exclude
选项并将它们存储在一个数组中。您可能已经注意到,参数扩展不会进行大括号扩展。
#!/bin/bash
# You didn't need to export these anyway, since only your script uses them
FEXCLUDE=( --exclude '*edit'
--exclude '*debug'
# etc
)
DEXCLUDE=( --exclude-dir log
--exclude-dir tmp
# etc
)
SRCDIR=/opt/jboss-as-7.1.1.Final/standalone
confshow() {
while IFS= read -d'' -r ii; do
cp --parents "$ii" confs
done < <( grep -rlZ "${FEXCLUDE[@]}" "${DEXCLUDE[@]}" "<datasource\|username\|password\|user-name" $SRCDIR/* )
此外,使用 ls
违背了使用 grep
的 null 分隔输出的初衷。
关于linux - 如何在 bash 脚本的环境变量中存储 --exclude grep 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335552/
我有这样的情况: ids = [None, None, None] foo = Foo.objects.filter(common=True).exclude(id__in=ids) 这似乎总是排除所
我创建了一个简单的测试目录: ├── backup.tgz ├── Dummy-dir │ ├── dummy-file-a.txt │ ├── dummy-file-b.txt │ ├─
有了这个 persistence.xml : org.eclipse.persistence.jpa.PersistenceProvider osgi:s
我正在使用 powershell 更新索引策略,但它默认在排除路径中添加 "path": "/\"_etag\"/?" 属性我希望索引策略是 { "indexingMode": "consis
我正在使用 Django 查询从表中过滤掉一些事务,其中一个事务可能在表中有多个条目。 例如示例表 +---------------+---------+ | TransactionId | Stat
我使用 eclipselink 作为 JPA 提供程序,并且需要将实体保存在 jar 文件中。所有 jar 实体都用 @Entity 进行注释。我尝试了 false 和 true 但它没有自动检测实体
这是 Ignore files in git log -p 的后续行动也与Making 'git log' ignore changes for certain paths有关. 我正在使用 Git
我在 Android Studio 中导入了一个库项目,但我无法排除一个组,因为当 compile 指令位于包含的项目中时,gradle 找不到那个 exclude 方法方法? 它可以找到以下方法的排
我正在使用 gitbash 和 git 版本 2.20.1.windows.1。 commit , diff , branch一切正常,但 git status (当然是最基本的命令?)失败。错误信息
假设最开始的命令是这样的 rsync -e 'ssh -p 30000' -avl --delete --stats --progress demo@123.45.67.890:/home/demo
我有一个我想忽略的日期列表: private val excludeDates = List( new DateTime("2015-07-17"),
我有一个这样的表: DESC mytable id | parent 1 | 2 2 | null 3 | null 4 | null 5 | 3 ... | ... 3种条目:
首先,这是我的代码: Bill: 它应该像这样工作: 当我点击“搜索”时,URL 应更改为 "shpapp01/Web/Public.html#/PublicWeb/Tracking/Searc
我继承了一堆C#代码。对于几个方法定义,我找到了 ///作为它前面唯一的 XMLDoc。我试图用谷歌搜索它的含义,但没有成功。有人可以解释一下这可能意味着什么吗? 最佳答案 在NDoc至少,这意味着应
我在将单个目录从远程机器复制到本地时遇到问题。 这是我使用的命令: rsync -chavzP --stats --exclude='/var/www/html/px3' root@IPHERE:/v
我有一个从 1 到 100 的数组: array=$(seq 100) 我的任务是排除 60 到 80 的范围。 最佳答案 您可以将参数扩展与偏移/长度规范一起使用。 #! /bin/bash arr
背景 我一直在使用 Exclude和 Extract实用程序类型,但遇到过我只想匹配确切类型而不是子类型的情况。 到目前为止 我已经成功创建了一个 StrictExtract只提取完全匹配的类型的实用
我在 Windows 上,使用 Subersive 运行 Eclipse Indigo 以连接到 远程 svn 仓库。 我有一个项目 check out 到本地文件夹。项目中有一些目录我想从 chec
我正在 Django 中创建一个稀疏的首选项表。我的模型很简单: class Preference(models.Model): user = models.ForeignKey(settin
我有一个 tar/gzip 文件,我正在使用 ansible unarchive 模块提取到主机列表。 以下是configs.tgz的部分内容列表: -rw-rw-r-- ian/ian
我是一名优秀的程序员,十分优秀!