我有一组>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
变元导致文件路径打印时使用尾随的