【发布时间】:2012-02-23 14:26:09
【问题描述】:
我用 'bar' 替换所有 'foo' 实例的代码:
find . -type f |
xargs grep 'foo' -l |
xargs sed -i 's|foo|bar|g'
我想将修改后的文件列表保存到文本文档中。可能吗?
编辑:
这是对我有用的最终代码:
find . -type f -print0 |
xargs -0 grep 'foo' -l |
tee result.txt |
xargs -0 sed -i 's|foo|bar|g'
不确定这是否是最快的方法,但对于几千个文件,这种方法与其他建议方法的速度差异可能非常小。
【问题讨论】:
-
你为什么不用一个小子集来测试时间 - 不是太小,但也许可以运行一分钟?如果您的数据不是非典型的,我不会期望太大的差异。但是您的代码会因文件名包含空格、制表符、换行符等而失败。您确定您的文件不包含此类内容吗?
-
在您的 cmets 之后,我使用
print0和-0修改了上面的代码 -
是的,但是使用 xargs 和类似的批处理方法肯定是一个好习惯,因为当您的参数大小超过命令行限制时,名称中有空格或非典型字符 (print0) 或存在风险许多进程(exec)被分叉而不是批处理。
标签: replace sed find grep xargs