提高简单find -exec命令的性能

时间:2019-02-07 11:03:31

标签: bash performance

说我有一个非常简单的命令在bash中运行:

find [folder] -exec ( echo [something manipulated with sed]; cat [small_file]; ) > file

其中文件夹包含600万个小文件,例如:

$ cat smallfile_000000001.txt
123456789012345678901234567890

我怎样才能使它更快..或对top / iostats进行故障排除,是什么使这个过程永远持续下去?拥有600万个文件,大约需要6个小时。一秒钟内,大约处理了270个文件。

任何指导我朝正确方向发展的技巧或分析将不胜感激!谢谢!

编辑:的确切执行者是:

-exec ./helper.sh {} \; > output.txt

其中helper.sh是:

echo -ne "$1 " | sed 's/\.\.\/something\/foo\/bar\/123\///'
cat "$1"
exit 0

1 个答案:

答案 0 :(得分:1)

您正在生成一个脚本,分别为找到的每个文件sedcat。通过使用另一种设计,您将获得很好的速度改进:将-exec ... +的{​​{1}}构造与awk一起使用,如下所示:

find [folder] -exec awk '{sub(/\.\.\/something\/foo\/bar\/123\//, "", FILENAME); print FILENAME, $0}' {} + > output.txt

这将为一堆文件启动唯一的awk