说我有一个非常简单的命令在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
答案 0 :(得分:1)
您正在生成一个脚本,分别为找到的每个文件sed
和cat
。通过使用另一种设计,您将获得很好的速度改进:将-exec ... +
的{{1}}构造与awk
一起使用,如下所示:
find [folder] -exec awk '{sub(/\.\.\/something\/foo\/bar\/123\//, "", FILENAME); print FILENAME, $0}' {} + > output.txt
这将为一堆文件启动唯一的awk
。