如何批量压缩不同的子文件夹?

如何批量压缩不同的子文件夹?

我有一个all_folders包含 5 个文件夹的文件夹:

./all_folders
./all_folders/folder1
./all_folders/folder2
./all_folders/folder3
./all_folders/folder4
./all_folders/folder5

我可以使用一个命令一次性压缩所有这些文件夹吗?我想进入all_folders目录,然后执行命令,以便压缩该目录中的各个文件夹。

预期输出是

当我做

ls 

,那么all_folders我应该有 10 个目录。 5 个未压缩的和 5 个压缩的。

答案1

cd进入all_folders,然后运行

for i in folder1 folder2 folder3 folder4 folder5; do tar czf $i.tar.gz $i; done

答案2

有点不清楚你想要实现什么目标。我正在运行仅应在此处压缩子目录的用例。

首先,转到包含目录集合的目录,然后:

find -maxdepth 1 -type d | {
    while read dir; do 
        if [ ! "x${dir#*/}" = "x." ]; then
            tar cJf ${dir#*/}.tar.xz ${dir#*/};
        fi;
    done
}

这与zsh.要进行测试,请在 ,echo前面放置一个tar, 来查看命令是否签出等。

然而,像这样收集档案通常是不可取的。通常,您需要压缩整个集合、对这些文件所在的驱动器使用透明压缩,或者使用传输压缩(X-DEFLATE例如使用 HTTP)。

请注意,您最终不会得到“压缩目录”,而是得到“压缩存档”,这些东西是不可互换的,因为存档本身就是文件,而目录只是文件索引节点数据报。

答案3

tar -zcvf archive.tar.gz directory/ 

这将告诉 tar 从目录中的文件中 c(创建)一个存档(tar 默认情况下是递归的),使用 z (gzip) 算法对其进行压缩,将输出存储为名为 archive.tar.gz 的 af(文件),然后v (详细地)列出它添加到存档中的所有文件。

要将存档解压并解压到当前目录中,您可以使用

tar -zxvf archive.tar.gz 

在此输入图像描述

相关内容