检查根文件夹内容相同性的最快方法?

检查根文件夹内容相同性的最快方法?

我有一些原始的解决方案,但运行时太长:

find "/home/user" -type d -printf "%P\n" | sort > "source_1d"
find "/mnt/home/user" -type d -printf "%P\n" | sort > "source_2d"
diff -u "source_1d" "source_2d"                                    # '-_d' means 'directories'

pat="/home/user"; rpt="\/home\/user"
find "$pat" -type f -print0 | sort -z | xargs -r0 sha256sum | sed -E "s/\s\s$rpt\//  .\//" | > "source_1f"
pat="/mnt/tra/home/user"; rpt="\/mnt\/tra\/home\/user"
find "$pat" -type f -print0 | sort -z | xargs -r0 sha256sum | sed -E "s/\s\s$rpt\//  .\//" | > "source_2f"
diff -u "source_1f" "source_2f"

我可以用比较中使用的第二个源的磁盘大小使用计算来替换它的第二部分吗?或者如果大小和所属文件夹相等,ext4并不意味着相同?

答案1

另一种方法是运行rsync --dry-run。这将检查两棵树并输出差异。

rsync --dry-run --checksum source destination

或者您可以依靠rsync的快速方法(修改时间和大小)。

rsync --dry-run source destination

或在可用方法中决定使用哪个校验和--checksum-choice。另外,如果您需要有关差异的更多信息,您可以添加--itemize.

请注意,对每个文件进行完整的校验和必然会很慢,因为您必须完整读取它们。

答案2

使用hardlink -vn。看http://manpages.ubuntu.com/manpages/bionic/man1/hardlink.1.htmlhardlink检查相同的文件并链接它们,但使用-nv仅列出相同的文件。

相关内容