gpt4 book ai didi

linux - 列出其内容可以与多个字符串中的任何一个匹配的所有文件名的最快方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:00 25 4
gpt4 key购买 nike

我想弄清楚什么是最快的方法来返回其内容与多个字符串中的任何一个匹配的所有文件名。我正在使用 xargs 进行迭代。


$ cat ../Identifiers.list | xargs -i grep -l "{}" .

打印所有文件名大约需要 8 分钟。有没有更快的方法?


Identifiers.list - 文件内容如下

287434
383460
633491
717255
827734
253735
635373
553888
910366

目录中的文件数 - 36000

$ ls -l *.xml | wc -l
36000

最佳答案

我会反过来做:

printf '%s\0' *.xml | xargs -0 grep -lFf ../Identifiers.list

这将只检查每个文件一次,并在找到匹配项后立即停止。 -F 使用固定字符串匹配而不是正则表达式,这应该会进一步加快速度。

我认为你的方法隐含地使用了 -L 1(因为 -i),所以对于 Identifier.list 的每一行,它遍历所有文件。

并行化可能会更快,例如使用四个并行进程:

printf '%s\0' *.xml | xargs -0 -P 4 grep -lFf ../Identifiers.list

如果您的文件是 ASCII 文件,您可以使用 LC_ALL=C 以提高速度:

printf '%s\0' *.xml | LC_ALL=C xargs -0 -P 4 grep -lFf ../Identifiers.list

不过,使用 xargs 是个好主意,即使没有并行化:直接使用 grep,如

grep -lFf ../Identifiers.list *.xml

可能会引发错误,因为 *.xml 扩展为太长的命令行。

关于linux - 列出其内容可以与多个字符串中的任何一个匹配的所有文件名的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54486454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com