我使用以下sed命令编辑了近6000个文件。它需要更长的时间。
是否有人知道如何更快地制作以下命令。
find ./ -type f -exec sed -i -e 's/old word/new word/g' {} \;
答案 0 :(得分:4)
类似于@ JonathanLeffler为多个文件运行一次sed调用的策略,但你也可以使用xargs并行运行多个线程,利用多个处理器。
find ./ -type f -print0 | xargs -0 -n 100 -P 8 sed -i .bak -e 's/old word/new word/g'
答案 1 :(得分:3)
实际上只有一种方法可以加快速度,即通过将sed
替换为\;
来减少+
。这使find
组文件名达到了方便的限制,大致类似于xargs
,但没有必须依赖GNU -print0
和-0
选项的麻烦分别为find
和xargs
- 虽然它们也可在Mac OS X上提供的BSD find
和xargs
中使用。它也是POSIX标准符号。
请注意,您使用后缀-e
备份受影响的文件,因为sed
的Mac版本坚持-i
选项的参数,-e
恰好在那里使用,脚本不必以-e
作为前缀。
因此,此命令应该更快地运行:
find ./ -type f -exec sed -i .bak -e 's/old word/new word/g' {} +
争议的速度有多快。