求脚本:压缩指定目录下所有子目录,忽略目录内文件
仅压缩指定目录下子目录、忽略文件的脚本方案
你的需求是对目标目录下的所有子目录进行7z压缩,同时保留该目录下的文件,原脚本因为没有区分目录和文件,导致所有内容都被压缩删除,以下是修正后的方案:
修正后的脚本
for i in /foo/*; do # 仅处理目录,跳过文件 if [ -d "$i" ]; then f=$(basename -- "$i") 7z a "/foo/$f.7z" "$i" rm -Rf "$i" fi done
关键改动说明
- 新增
if [ -d "$i" ]; then判断:-d是Shell的目录检测参数,只有当遍历到的对象是目录时,才会执行压缩和删除操作,自动跳过原目录下的文件(比如示例中的barbaz.txt) - 保留原脚本的核心逻辑:获取目录名、7z压缩、删除原目录,确保处理后的目录结构完全符合你的预期
额外提示
- 建议先在测试目录中验证脚本逻辑,避免误删重要数据
- 如需调整压缩级别,可在
7z a后添加参数,比如7z a -mx9 "/foo/$f.7z" "$i"(-mx9代表最高压缩等级)
内容的提问来源于stack exchange,提问作者addohm
相关产品推荐
相关产品推荐

