我有一些原始的解决方案,但运行时太长:
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.html
。hardlink
检查相同的文件并链接它们,但使用-nv
仅列出相同的文件。