bash - unix:循环查找命令的结果

标签 bash shell loops unix find

我有一个 find 命令,可以按照我的意愿输出(它查找名称中包含 strelka 并以 .vcf 结尾的文件):

find . -name *strelka* | grep '.vcf$'

但我想迭代每个并执行其他操作。

为了简单地进行实验,我只是让它对每个文件进行行计数(但最终我想做更多,这只是我在玩),但它似乎已经不起作用.

我有:

for i in find . -name \*strelka\* | grep '.vcf$'; do wc -l $i; done

有人知道这是怎么回事吗?

最佳答案

  1. 使用查找。 -name '*strelka*.vcf',从而避免 grep 并让您使用 find ... -exec

  2. 通过管道输入 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/

相关文章:

bash - 将 bash 变量放入 zip 命令的文件名中

bash - 使用 env 为子 shell 设置变量有优势吗?

bash - 如何在 bash 中使用不可打印的字符作为排序命令的字段分隔符?

bash - 这里文档作为 bash 函数的参数

JavaScript - 通过对象递归循环

php - 如何使用循环插入多个值?

bash 突破读取内部陷阱

bash - 使用 expect 确认密码

linux - bash : expression recursion level exceeded (error token is . ..)

c++ - 在C中循环不进行n次比较