如何递归获取服务器所有文件的MD5哈希?解决参数过长报错
解决递归计算所有文件MD5时的"参数列表过长"问题
最终可用命令
ssh -p 9919 server01 'find / -type f -exec md5sum {} + 2>&1 | grep -v "Permission denied"' > /home/serveradmin/md5current/server01.log
命令说明
find / -type f:递归遍历根目录下所有普通文件,自动跳过目录,无需额外过滤目录相关报错-exec md5sum {} +:将find找到的文件分批传递给md5sum执行,既避免了"参数列表过长"的问题,又比逐个文件调用md5sum(-exec ... \;)的效率更高2>&1:将错误输出重定向到标准输出,方便后续过滤权限报错grep -v "Permission denied":过滤掉权限不足无法读取文件的错误信息
为什么之前的方法失效
- 第一个命令
md5sum /*仅处理根目录下的一级文件,没有递归遍历子目录,无法获取所有文件的MD5 - 第二个命令用
globstar的/**匹配所有文件时,会将所有文件路径一次性传给md5sum,当文件数量过多时,超出系统允许的命令行参数长度限制,触发bash: /usr/bin/md5sum: Argument list too long报错
优化建议(可选)
如果不需要计算虚拟文件系统(如/proc、/sys、/dev)中的文件,可以添加排除规则,减少不必要的计算:
ssh -p 9919 server01 'find / -path "/proc" -prune -o -path "/sys" -prune -o -path "/dev" -prune -o -type f -exec md5sum {} + 2>&1 | grep -v "Permission denied"' > /home/serveradmin/md5current/server01.log
内容的提问来源于stack exchange,提问作者robm
相关产品推荐
相关产品推荐

