我有一个 find 命令,可以按照我的意愿输出(它查找名称中包含 strelka 并以 .vcf 结尾的文件):
block 引用>find . -name *strelka* | grep '.vcf$'
但我想迭代每个并执行其他操作。
为了简单地进行实验,我只是让它对每个文件进行行计数(但最终我想做更多,这只是我在玩),但它似乎已经不起作用.
我有:
block 引用>for i in
find . -name \*strelka\* | grep '.vcf$'
; do wc -l $i; done有人知道这是怎么回事吗?
最佳答案
使用查找。 -name '*strelka*.vcf',从而避免 grep 并让您使用 find ... -exec
通过管道输入 xargs,或使用 -exec:
find . -name '*strelka*.vcf' | xargs wc -l find . -name '*strelka*.vcf' -exec wc -l '{}' \;
出于各种原因,更喜欢后者。
你的方法(在你的发现周围有一个 $(...) )是可以的,除了:
- 如果文件名中有空格,您会感到悲伤。 (你也会对 xargs 感到悲伤 - 有一种涉及\0 的方法,但它有点神秘。)
- 如果匹配文件太多,您将超出命令行长度限制。
关于bash - unix:循环查找命令的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22363983/