将 GNU sed 与 GNU find 一起使用时如何加速替换?
How to accelerate substitution when using GNU sed with GNU find?
我有一个由数百个目录组成的数值模拟结果;每个目录包含数百万个文本文件。
我需要用“wavelength_bc;
”替换字符串“wavelength;
”,所以我尝试了以下两种方法:
find . -type f -exec sed -i 's/wavelength;/wavelength_bc;/g' {} \;
和
find . -type f -exec sed -i 's/wavelength;/wavelength_bc;/g' {} +
不幸的是,上面的命令需要很长时间才能完成(超过 1 小时)。
我想知道如何利用我机器上的核心数 (8) 来加速上面的命令?
我正在考虑使用带有 -P
标志的 xargs
。我担心那会破坏文件;所以我不知道这是否安全?
总结:
- 与
find
一起使用时如何加速 sed
替换?
- 并行使用
xargs -P
到 运行 安全吗?
谢谢
xargs -P
应该可以安全使用,但是您需要使用 find
的 -print0
选项并通过管道传输到 xargs -0
以使用空格或通配符寻址文件名:
find . -type f -print0 |
xargs -0 -I {} -P 0 sed -i 's/wavelength;/wavelength_bc;/g' {}
xargs
中的 -P 0
选项将在并行模式下 运行。它将 运行 为您的 CPU.
尽可能多的进程
这可能对你有用(GNU sed 和并行):
find . -type f | parallel -q sed -i 's/wavelength;/wavelength_bc;/g' {}
GNU 并行将 运行 与机器上并行的内核一样多的作业。
我有一个由数百个目录组成的数值模拟结果;每个目录包含数百万个文本文件。
我需要用“wavelength_bc;
”替换字符串“wavelength;
”,所以我尝试了以下两种方法:
find . -type f -exec sed -i 's/wavelength;/wavelength_bc;/g' {} \;
和
find . -type f -exec sed -i 's/wavelength;/wavelength_bc;/g' {} +
不幸的是,上面的命令需要很长时间才能完成(超过 1 小时)。
我想知道如何利用我机器上的核心数 (8) 来加速上面的命令?
我正在考虑使用带有 -P
标志的 xargs
。我担心那会破坏文件;所以我不知道这是否安全?
总结:
- 与
find
一起使用时如何加速sed
替换? - 并行使用
xargs -P
到 运行 安全吗?
谢谢
xargs -P
应该可以安全使用,但是您需要使用 find
的 -print0
选项并通过管道传输到 xargs -0
以使用空格或通配符寻址文件名:
find . -type f -print0 |
xargs -0 -I {} -P 0 sed -i 's/wavelength;/wavelength_bc;/g' {}
xargs
中的 -P 0
选项将在并行模式下 运行。它将 运行 为您的 CPU.
这可能对你有用(GNU sed 和并行):
find . -type f | parallel -q sed -i 's/wavelength;/wavelength_bc;/g' {}
GNU 并行将 运行 与机器上并行的内核一样多的作业。