可以使用以下命令将当前目录下的每个子目录分别压缩为独立的zip文件:
find . -maxdepth 1 -mindepth 1 -type d -print0 | xargs -0 -I {} sh -c 'zip -r "{}.zip" "{}"'
步骤解释:
- 查找子目录:
find . -maxdepth 1 -mindepth 1 -type d
-maxdepth 1
:仅搜索当前目录,不进入子目录。-mindepth 1
:排除当前目录自身(.
)。-type d
:仅匹配目录。
- 处理特殊字符:
-print0 | xargs -0
-print0
:以null
字符分隔结果,避免空格/特殊字符导致的问题。-0
:让xargs
接收null
分隔的输入。
- 构建压缩命令:
-I {} sh -c 'zip -r "{}.zip" "{}"'
-I {}
:将每个目录路径替换到{}
的位置。sh -c
:执行包含空格处理的命令。zip -r "{}.zip" "{}"
:递归压缩目录,双引号确保路径中的空格被正确处理。
效果示例:
- 目录
project
➔ 生成project.zip
- 含空格的目录
my data
➔ 生成my data.zip
注意: 所有生成的zip文件会保存在当前目录中。如果需要在压缩后删除原目录,可在zip
命令后添加&& rm -rf "{}"
,但请谨慎操作。