差异文件夹递归与多线程

时间:2011-08-23 10:54:54

标签: multithreading performance shell unix diff

我需要比较两个目录结构,每个目录结构大约有十亿个文件(目录深度最多20个级别)

我发现通常diff -r /location/one /location/two慢了。

有多线程差异的实现吗?或者通过将shelldiff组合在一起可行吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:2)

你的磁盘将成为瓶颈。

除非您正在使用tmpfs,否则您可能只会放松速度。那说:

find -maxdepth 1 -type d -print0 |
    xargs -0P4 -n1 -iDIRNAME diff -EwburqN "DIRNAME/" "/tmp/othertree/DIRNAME/"

应该做比较树的相当不错的工作(在这种情况下./tmp/othertree)。

它现在有一个缺陷,因为它不会检测otherthree.中不存在的-P4中的目录。 我把它作为读者的练习 - 尽管你可以轻松地反复重复比较

xargs的参数-q指定您最多需要4个并发进程。

另外,请查看 the xjobs utitlity ,它可以更好地分离输出。我认为使用GNU xargs(如图所示)你不能删除{{1}}选项,因为它会混合差异(?)。