![1.6 总结哪些文件不同](https://linux22.com/image/44040/1.6%20%E6%80%BB%E7%BB%93%E5%93%AA%E4%BA%9B%E6%96%87%E4%BB%B6%E4%B8%8D%E5%90%8C.png)
和
diff -r
diff
我可以完成这项任务,但是由于检查文件的内容而需要很长时间。
我想要一些东西来确定两个文件在大小、上次修改等方面是相同的。但没有一点一点地检查文件(例如视频需要很长时间)。
还有其他办法吗?
答案1
rsync 默认情况下仅比较元数据。
rsync -n -a -i --delete source/ target/
解释:
-n
比较但实际上不复制或删除<-- 这很重要!!1-a
比较所有元数据-i
每个文件打印一行信息--delete
还报告目标中但不在源中的文件
注意:在目录名称后附加斜杠非常重要。这是一个 rsync 的东西。
另请注意:rsync 是一个强大的工具。针对这个问题的上下文,上面的一些解释被粗略地简化了。尤其-a
是比“所有元数据”复杂得多。
你可以像这样缩短一个字母选项
rsync -nai --delete source/ target/
您可以提供-i
两次,以便为相同的文件打印信息
rsync -naii --delete source/ target/
示例输出:
.d..t...... ./ (directory with different timestamp)
>f.st...... modifiedfile (file with different size and timestamp)
>f+++++++++ newfile (file in source but not in target)
*deleting removedfile (file in target but not in source)
.f samefile (file that has same metadata. only with -ii)
请记住,rsync 仅比较元数据。这意味着如果文件内容发生更改但元数据仍然相同,则 rsync 将报告该文件相同。这是不太可能出现的情况。通常,如果数据发生变化,元数据也会发生变化。因此,要么相信当元数据相同时数据就相同,要么您必须逐位比较文件数据。
奖励:有关进度信息,请参见此处:估计完成 rsync 所需的时间或工作量?
答案2
我刚刚发现tree
。
tree old_dir/ > tree_old
tree new_dir/ > tree_new
vimdiff tree_old tree_new
答案3
-q
将( --brief
) 选项与diff -r
( ) 一起使用diff -qr
。从info
GNU 页面diff
:
1.6 总结哪些文件不同
当你只想找出文件是否不同,而不关心差异是什么时,可以使用摘要输出格式。在此格式中,
diff' simply reports whether files differ. The
--brief' (`-q') 选项选择此输出格式,而不是显示文件之间的差异。当比较两个目录的内容时,这种格式特别有用。它也比正常的逐行比较快得多,因为“diff”一旦知道存在任何差异就可以停止分析文件。
这不会逐行比较,而是将文件作为一个整体进行比较,这大大加快了处理器的速度(您正在寻找的内容)。
答案4
如果您只需要知道两个文件系统分支中的文件是否不同(不查看文件内部),您可以执行以下操作:
find /opt/branch1 -type f | sort | xargs -i md5sum {} >/tmp/branch1;
find /opt/branch2 -type f | sort | xargs -i md5sum {} >/tmp/branch2;
diff /tmp/branch1 /tmp/branch2;
华泰