如何用Bash批量生成带独立密码的7z目录压缩包并记录信息
改进后的批量7z加密压缩脚本
以下是满足你需求的Shell脚本,实现批量为每个目录生成独立64位密码、6位随机前缀文件名,并记录文件名与密码的对应关系:
# 初始化密码映射文件(清空已有内容或新建) > password_map.txt # 遍历当前目录下的所有子目录(仅处理目录,排除普通文件) for dir in */; do # 移除目录名末尾的斜杠,获取干净的目录名称 dir_name=${dir%/} # 生成64位纯字母数字随机密码(基于系统加密安全随机源) password=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 64) # 生成6位纯字母数字随机文件名前缀 prefix=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 6) # 构造最终压缩包文件名 archive_name="${prefix}_archive_${dir_name}.7z" # 执行7z加密压缩,开启文件名加密(-mhe=on) 7za a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off -p"$password" -mhe=on "$archive_name" "$dir_name" # 将文件名与对应密码以数组形式写入映射文件,方便后续追踪 echo "['$archive_name', '$password']" >> password_map.txt echo "完成压缩:$archive_name,密码已记录" done
关键改进说明
- 独立密码生成:通过
/dev/urandom系统随机源生成64位纯字母数字密码,避免特殊字符导致的命令解析问题,同时保证密码的随机性和安全性。 - 6位前缀生成:采用相同随机方式生成6位前缀,确保每个压缩包文件名唯一,避免重名冲突。
- 密码映射追踪:将每个压缩包的文件名与对应密码以数组元素格式写入
password_map.txt,方便后续批量管理和查询。 - 安全参数处理:密码用双引号包裹传递给7z命令,避免密码包含空格或特殊字符时出现执行错误;仅遍历子目录,避免误压缩普通文件。
- 文件名加密:保留原脚本的
-mhe=on参数,确保压缩包内的文件名也被加密,提升安全性。
使用注意事项
- 确保系统已安装
7za工具:Debian/Ubuntu可执行sudo apt install p7zip-full,RHEL/CentOS可执行sudo yum install p7zip。 password_map.txt需妥善保管,一旦丢失将无法恢复加密压缩包的内容。- 若需要固定前缀而非随机生成,可将
prefix变量替换为你指定的6位字符串(如prefix="636995")。
内容的提问来源于stack exchange,提问作者superuser-Miguel
相关产品推荐
相关产品推荐

