bash – 递归diff非常慢 – 检查目录的内容
发布时间:2020-12-15 22:44:36 所属栏目:安全 来源:网络整理
导读:大家好, 我在两个目录上运行差异,递归,有几个选项.目录有点大,但是,我试图只是看到文件夹内容的差异,而不是文件之间的差异,使用-q选项(我使用这个吗?) 我也尝试过rsync干运行,这似乎也需要同样的时间.输出通过sed,我试过没有,它似乎没有任何影响.我也忽略隐
大家好,
我在两个目录上运行差异,递归,有几个选项.目录有点大,但是,我试图只是看到文件夹内容的差异,而不是文件之间的差异,使用-q选项(我使用这个吗?) 我也尝试过rsync干运行,这似乎也需要同样的时间.输出通过sed,我试过没有,它似乎没有任何影响.我也忽略隐藏文件.我想我可能错误地使用diff -q来比较2个目录的内容. 我使用了另一个提示的代码块来计算这些目录中的一个是多久(1个目录,14个子目录),花了88分钟.然而,每个文件都是一个30分钟的电视节目,所以如果差异比较这些文件,这是有道理的,但我认为-q会导致这种情况不会发生? 另外,一个目录安装在AFP上,一个是火线连接的外部驱动器.这没关系,因为我在本地复制了两个目录,并且差异占用了相同的时间. 这是代码;有什么建议? #!/bin/bash before="$(date +%s)" diff -r -x '.*' /Volumes/directory1/ /Volumes/directory2/ | sed 's/^.{24}//g' > /Volumes/stuff.txt diff -r -x '.*' /Volumes/directory3/ /Volumes/directory4/ | sed 's/^.{24}//g' > /Volumes/stuff.txt diff -r -x '.*' /Volumes/directory5/ /Volumes/directory6/ | sed 's/^.{24}//g' > /Volumes/stuff.txt diff -r -x '.*' /Volumes/directory7/ /Volumes/directory8/ | sed 's/^.{24}//g' > /Volumes/stuff.txt diff -r -x '.*' /Volumes/directory9/ /Volumes/directory10/ | sed 's/^.{24}//g' > /Volumes/stuff.txt diff -r -x '.*' /Volumes/directory11/ /Volumes/directory12/ | sed 's/^.{24}//g' > /Volumes/stuff.txt after="$(date +%s)" elapsed_seconds="$(expr $after - $before)" echo Elapsed time for code block: $elapsed_seconds 解决方法
当文件不同时,差异将能够很快地解决这个问题.但是,当它们相同时,它必须完整扫描文件以验证它们确实是逐字节相同的.
如果您关心的只是文件名的差异而不想检查文件的内容,请尝试以下方法: diff <(find /Volumes/directory1/ -printf '%Pn') <(find /Volumes/directory2/ -printf '%Pn') 这假设您使用-printf动作进行GNU查找.如果你不这样做,请根据戈登的评论使用一些子壳魔法: diff <(cd /Volumes/directory1; find .) <(cd /Volumes/directory2; find .) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |