如何将多个文件夹压缩成自己的zip存档?

时间:2013-12-08 10:34:41

标签: linux bash command-line terminal

所以我想创建一个脚本,使我能够将每个文件夹压缩成自己的zip 存档而不是一个大的zip文件。

举个例子,我有一个目录:

+ MyDirectory/
| |
| + Folder_01/
| |
| + Folder_02/
| |
| + Folder_03/
|

当我在MyDirectory下运行脚本后,我会在MyDirectoryFolder_01.zip Folder_02.zipFolder_03.zip和{{}内找到每个文件夹的zip文件1}}。 我知道一些BASH,但这是我无法弄清楚的。

如何做到这一点?

亲切的问候。

4 个答案:

答案 0 :(得分:38)

for i in *
do
[ -d "$i" ] && zip -r "$i.zip" "$i"
done

您浏览所有目录并为每个目录创建zip。

或者更简洁:

for i in */; do zip -r "${i%/}.zip" "$i"; done

(感谢damienfrancois的建议)。

答案 1 :(得分:4)

此处

for i in */; do tar -czvf "${i%/}.tar.gz" "$i"; done

答案 2 :(得分:0)

如果您需要较小的输出(以较长的处理为代价),请考虑使用xz算法:

for d in */ ; do
    outName=$d;
    outName=${outName// /\-};
    outName=${outName//[!0-9a-z-]};
    dirName=$d;
    dirName=${dirName//\/}
    tar -c "$dirName" | xz -e > $outName.tar.xz
done

此代码将清理文件夹名称并为当前目录中的每个文件夹生成.tar.xz

答案 3 :(得分:0)

我采用旧的解决方案并返回另一个适用于驱动器中任何位置的任何目录的好的解决方案

Bash 中的这段代码

#!/bin/bash

folderPath=/home/ahmed/test/

for folder in $folderPath*
do
        folderName=$(basename $folder)
        cd $folderPath && zip -r $folderName.zip $folderName
done

所以test文件夹内的所有文件夹都会被压缩到同一个文件夹中