vic*_*orz 129 linux directory md5sum
我需要为*.py位于目录和所有子目录下的特定类型(例如)的所有文件计算摘要md5校验和.
最好的方法是什么?
编辑:建议的解决方案非常好,但这不是我需要的.我正在寻找一种解决方案,以获得单个摘要校验和,它将唯一地标识整个目录 - 包括其所有子目录的内容.
ire*_*ses 161
动态创建tar归档文件并将其传递给md5sum:
tar c dir | md5sum
Run Code Online (Sandbox Code Playgroud)
这会生成一个md5sum,它对于您的文件和子目录设置应该是唯一的.磁盘上没有创建文件.
unu*_*tbu 147
find /path/to/dir/ -type f -name "*.py" -exec md5sum {} + | awk '{print $1}' | sort | md5sum
Run Code Online (Sandbox Code Playgroud)
find命令列出以.py结尾的所有文件.为每个.py文件计算md5sum.awk用于挑选md5sums(忽略文件名,这可能不是唯一的).md5sums已排序.然后返回此排序列表的md5sum.
我通过复制测试目录测试了这个:
rsync -a ~/pybin/ ~/pybin2/
Run Code Online (Sandbox Code Playgroud)
我重命名了〜/ pybin2中的一些文件.
该find...md5sum命令为两个目录返回相同的输出.
2bcf49a4d19ef9abd284311108d626f1 -
Run Code Online (Sandbox Code Playgroud)
Die*_*_be 44
ire_and_curses的使用建议tar c <dir>有一些问题:
rsync -a --delete:它几乎同步所有内容(减去xattrs和acls),但它将根据其ID同步所有者和组,而不是字符串表示.因此,如果您同步到不一定具有相同用户/组的其他系统,则应将该--numeric-owner标志添加到tar只要没有解决第一个问题(或除非你确定它不会影响你),我就不会使用这种方法.
find上面提出的基础解决方案也不好,因为它们只包含文件,而不是目录,如果校验和应该记住空目录,这就成了一个问题.
最后,大多数建议的解决方案不能一致地排序,因为整个系统的整理可能不同.
这是我提出的解决方案:
dir=<mydir>; (find "$dir" -type f -exec md5sum {} +; find "$dir" -type d) | LC_ALL=C sort | md5sum
Run Code Online (Sandbox Code Playgroud)
关于此解决方案的说明
LC_ALL=C是为了确保跨系统的可靠排序顺序-print0标志来解决这个问题,find但是由于这里还有其他的东西,我只能看到解决方案会让命令变得更加复杂然后它的价值.PS:我的一个系统使用有限的busybox find,它不支持-exec也不支持-print0标志,并且它附加'/'来表示目录,而findutils find似乎没有,所以对于这台机器我需要运行:
dir=<mydir>; (find "$dir" -type f | while read f; do md5sum "$f"; done; find "$dir" -type d | sed 's#/$##') | LC_ALL=C sort | md5sum
Run Code Online (Sandbox Code Playgroud)
幸运的是,我的名字中没有带换行符的文件/目录,所以这不是该系统的问题.
小智 13
如果你只关心文件而不是空目录,这很好用:
find /path -type f | sort -u | xargs cat | md5sum
Run Code Online (Sandbox Code Playgroud)
一个最适合我的解决方案:
find "$path" -type f -print0 | sort -z | xargs -r0 md5sum | md5sum
Run Code Online (Sandbox Code Playgroud)
它为什么最适合我的原因:
其他答案的问题:
文件系统元数据不会被忽略:
tar c - "$path" | md5sum
不处理包含空格的文件名,也不检测文件是否已重命名:
find /path -type f | sort -u | xargs cat | md5sum
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132707 次 |
| 最近记录: |