如何正确获取目录中含空格文件名的文件MD5sum?
批量计算目录文件MD5值(兼容带空格文件名)
你遇到的问题是shell对空格的拆分逻辑导致的,以下是两种可靠的解决方法:
方法一:使用find + exec(跨shell兼容)
直接通过find的-exec选项传递文件列表,它能正确处理带空格、特殊字符的文件名,再对结果按路径排序:
find /path/to/dir -type f -exec md5sum {} + | sort -k2
-exec {} +:将find找到的所有文件分批传递给md5sum,避免参数数量超限sort -k2:按输出的第二列(文件路径)排序,和你原命令的sort效果一致
方法二:使用bash globstar(仅bash 4.0+可用)
如果你的shell是bash,开启globstar扩展后可以用通配符匹配所有子文件,同样能处理空格:
shopt -s globstar nullglob md5sum /path/to/dir/** | sort -k2
globstar:让**匹配目标目录下所有层级的文件nullglob:当没有匹配到文件时,不输出**本身的字符串
为什么原命令失效?
- 不带引号的
md5sum $(find ...):shell会把find输出的内容按空格、换行拆分,带空格的文件名会被拆成多个独立参数,md5sum会把这些拆分后的片段当作不同文件名处理,导致错误。 - 带引号的
md5sum "$(find ...)":所有文件路径被合并成一个长字符串作为md5sum的单个参数,md5sum会尝试打开这个包含换行和空格的"文件名"(显然不存在),最终输出的是这个无效路径的空文件哈希,并非实际文件的MD5值。
内容的提问来源于stack exchange,提问作者Cedric
相关产品推荐
相关产品推荐

