基于多个文件-我们能做得比每个文件调用一次更好吗



我有一组>100000个我想应用sed脚本的文件。阅读这个问题的公认答案:

应用sed与多个文件

我看到这个建议涉及为每个感兴趣的文件调用sed,例如:

find $root_path -type f -name "whatever" -exec sed -i "somecommands" {} ;

但是,尽管这是有效的,它有点傻。毕竟,sed愿意处理许多文件,例如:

sed -i "somecommads" input_file_1 input_file_2

所以,我倾向于选择:

sed -i "somecommads" $(find $root_path -type f -name "whatever")

这确实有效。

除非你有很多文件。然后,bash告诉你"参数列表太长";。

对于将相同的sed脚本应用于处理或处理成百上千个文件,有没有这两种方法的替代方案?

您可以通过管道连接到xargs,但大多数find支持-exec的另一种风格,它运行的次数尽可能少:

find "$root_path" -type f -name "whatever" -exec sed -i "somecommands" {} +

您必须确保sed仍然单独处理文件,这是使用-s/--separate标志指示的,但这是由-i暗示的,所以您应该很好。

Do:

find $root_path -type f -name "whatever" -print0 | xargs -0 sed -i "somecommads"

find-print0变元导致文件路径打印时使用尾随的字符而不是换行符,而xargs的相应-0变元则使其在输入时使用作为分隔符。这将允许包含换行符的文件名。

相关内容

  • 没有找到相关文章

最新更新