我从Stackoverflow的这篇文章中发现,如果你只是想获得内容不同的相应文件列表,那么你可以执行:
diff --brief --recursive dir1/ dir2/
…并自己尝试,这给了一个不错的文件列表,其内容是不同的。
但是,如果我已经做了一个原始文件系统(假设BIG文件系统,例如2TB)的备份,我想检查备份是否与原来的相同(例如,我想检查备份是否成功),什么我应该跑,如果我只关心哪些文件不可用在任何一方? 我想要检查目录树FAST(不检查内容)的东西。
尽pipe比较文件大小并没有给出备份文件是否不同的绝对指示,但在比较命令期间比较该文件和其他非文件内容元数据将有所帮助。
(我很抱歉重新发布一个非常类似的问题,但我注意到一个用户认为这个问题可能是脱离主题,所以这个问题肯定是在stackoverflow。)
有关于此的任何经验?
检查修改时间和文件大小的非rsync解决scheme:
diff <(find dir1 -mindepth 1 -printf '%P %t %s\n' | sort) <(find dir2 -mindepth 1 -printf '%P %t %s\n' | sort) | grep -E '^[<>]'
示例输出:
> bar Sat Sep 14 11:52:33.0544384394 2013 91 < foo Fri Sep 13 17:58:21.0213671425 2013 445 > foo Sun Sep 8 23:01:02.0355432619 2013 347
显示foo已在dir1修改,而bar仅存在于dir2 。
您不会告诉我们您使用哪种备份解决scheme,但几乎所有真正的备份程序都具有“validation”模式。 (在这种情况下,“真正的”备份工具就像Bacula,专门为备份和恢复而devise的软件)。
所有其他的事情是平等的,我会build议使用真正的备份软件,其内置的validation工具。
所有其他的东西不相等, rsync -nav --delete <backup> <original>将是我的build议。
这样做会检查内容,并会告诉您有关额外的文件,不同的文件和缺less的文件。 它不像diff那样深入(慢),而-n意味着它不会实际触及文件系统。
由于上面的答案,我想出了下面的小脚本,我想分享一下:
# vi /bin/checkbackup #!/bin/bash echo "1/5: Checking source files..." find "$1" -type f -printf "%P %s\n" | sort > ~/.checkbackup_files.tmp echo "2/5: Comparing destination files..." find "$2" -type f -printf "%P %s\n" | sort | diff - ~/.checkbackup_files.tmp echo "3/5: Checking source directories..." find "$1" -type d -printf "%P\n" | sort > ~/.checkbackup_dirs.tmp echo "4/5: Comparing destination directories..." find "$2" -type d -printf "%P\n" | sort | diff - ~/.checkbackup_dirs.tmp echo "5/5: Cleaning up" rm -f ~/.checkbackup_files.tmp rm -f ~/.checkbackup_dirs.tmp # chmod 755 /bin/checkbackup
用法:
$ checkbackup /path/to/dir1 /path/to/dir2
没有报告意味着文件夹结构和名称是相同的,并且文件具有相同的大小和相同的名称,没有任何丢失。
在SATA2 5400rpm光盘上testing1.5TB目录树,大约5分钟完成testing。
这个脚本没有办法完成,毫无疑问,有更多的检查工具,其他的,更好,更快,更深入。 但是我想我会分享它。