Linux 通过校验和查找丢失的文件
我正在Linux系统上进行两个文件系统(我们称之为F1和F2)之间的大型数据迁移,这必然涉及将数据逐字复制到F2上不同结构的层次结构中,并更改文件名 我想编写一个脚本来生成一个文件列表,这些文件在F1中,但在F2中不在,即那些没有被迁移脚本复制到新层次结构中的文件,以便我可以返回并手动迁移它们。不幸的是,由于不值得深入研究的原因,无法修改迁移脚本以列出它未迁移的文件。我的问题不同于,因为我不能依赖文件名作为比较 我知道这个过程的基本轮廓是:Linux 通过校验和查找丢失的文件,linux,shell,scripting,checksum,Linux,Shell,Scripting,Checksum,我正在Linux系统上进行两个文件系统(我们称之为F1和F2)之间的大型数据迁移,这必然涉及将数据逐字复制到F2上不同结构的层次结构中,并更改文件名 我想编写一个脚本来生成一个文件列表,这些文件在F1中,但在F2中不在,即那些没有被迁移脚本复制到新层次结构中的文件,以便我可以返回并手动迁移它们。不幸的是,由于不值得深入研究的原因,无法修改迁移脚本以列出它未迁移的文件。我的问题不同于,因为我不能依赖文件名作为比较 我知道这个过程的基本轮廓是: 生成所有文件的校验和列表,通过F1递归 对F2进行同样
谢谢。也许可以查看FSLint的源代码以获取指针:关于F1:
# find / -type f -exec md5sum {} + > F1
在F2上:
# find / -type f -exec md5sum {} + > F2
然后:
您可能需要检查
find
的更多选项,此行仅查找常规文件。您可以执行以下操作:
f1# find yourrootdir -type f -exec sha1sum {} >> initial_files \;
f1# ...copy initial_files to machine f2...
f1# ...start copy...
f2# find yournewrootdir -type f -exec sha1sum {} >> final_files \;
f2# sort initial_files > INITIAL
f2# sort final_files > FINAL
f2# for sha1 in `comm -23 <(cat INITIAL | awk '{print $1}') <(cat FINAL | awk '{print $1}')`; do grep $sha1 INITIAL; done
f1#查找您的rootdir-type f-exec sha1sum{}>>初始文件\;
f1#…将初始文件复制到机器f2。。。
f1#…开始复制。。。
f2#查找您的NewRootDir-type f-exec sha1sum{}>>最终文件\;
f2#对初始文件进行排序_文件>初始
f2#对最终文件进行排序#最终文件
f2#对于'comm-23中的sha1,谢谢user362458,这很有用-但是因为'md5sum'将文件名放在校验和旁边,文件'F1'中的任何一行都不会与'f2'中的任何一行匹配,即使校验和相同。啊,我读你的帖子有点太快了,如果创建了一个新的hier,你就必须使用底部的Unknown's之类的解决方案,最好没有UUOC;)看看这个:这绝对是伟大的-正是我想要的。工作做得很好:)嗨,未知,我已经把你的解决方案制作成一个脚本,并在GPL下授权。我希望这对你来说没问题——这似乎是确保任何人都能使用它的最佳方式。如果有问题,请告诉我,我会把它取下来。别担心,这不像是什么绝密算法……)
f1# find yourrootdir -type f -exec sha1sum {} >> initial_files \;
f1# ...copy initial_files to machine f2...
f1# ...start copy...
f2# find yournewrootdir -type f -exec sha1sum {} >> final_files \;
f2# sort initial_files > INITIAL
f2# sort final_files > FINAL
f2# for sha1 in `comm -23 <(cat INITIAL | awk '{print $1}') <(cat FINAL | awk '{print $1}')`; do grep $sha1 INITIAL; done