代码之家  ›  专栏  ›  技术社区  ›  JoeSlav

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

  •  1
  • JoeSlav  · 技术社区  · 5 年前

    假设我有一个非常简单的命令在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 回复  |  直到 5 年前
        1
  •  1
  •   gniourf_gniourf    5 年前

    你正在生成一个脚本, sed cat 对于 每个 找到文件。通过使用另一种设计,您将获得良好的速度提升:使用 -exec ... + 构建与 awk 如下:

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

    这将启动一个独特的 AWK 一堆文件。