加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 递归diff非常慢 – 检查目录的内容

发布时间:2020-12-15 22:44:36 所属栏目:安全 来源:网络整理
导读:大家好, 我在两个目录上运行差异,递归,有几个选项.目录有点大,但是,我试图只是看到文件夹内容的差异,而不是文件之间的差异,使用-q选项(我使用这个吗?) 我也尝试过rsync干运行,这似乎也需要同样的时间.输出通过sed,我试过没有,它似乎没有任何影响.我也忽略隐
大家好,
我在两个目录上运行差异,递归,有几个选项.目录有点大,但是,我试图只是看到文件夹内容的差异,而不是文件之间的差异,使用-q选项(我使用这个吗?)

我也尝试过rsync干运行,这似乎也需要同样的时间.输出通过sed,我试过没有,它似乎没有任何影响.我也忽略隐藏文件.我想我可能错误地使用diff -q来比较2个目录的内容.

我使用了另一个提示的代码块来计算这些目录中的一个是多久(1个目录,14个子目录),花了88分钟.然而,每个文件都是一个30分钟的电视节目,所以如果差异比较这些文件,这是有道理的,但我认为-q会导致这种情况不会发生?

另外,一个目录安装在AFP上,一个是火线连接的外部驱动器.这没关系,因为我在本地复制了两个目录,并且差异占用了相同的时间.
我有一个解决方案 – 我在两个目录上运行ls -1并对输出进行差异化 – 但为什么差异需要这么长时间才能运行?

这是代码;有什么建议?

#!/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 .)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读