如何自动压缩目录中每个子文件夹的内容?

如何自动压缩目录中每个子文件夹的内容?

我希望自动压缩目录中每个子文件夹(不包括子文件夹本身)的内容,每个 .zip 文件对应每个子文件夹。有没有办法在 Ubuntu 22.04 中做到这一点?由 .zip 文件组成的输出可以位于每个子文件夹中,也可以位于一个位置的所有子文件夹中,我不在乎。

示例:代码将读取/获取子文件夹 1 的内容并将其压缩,然后对子文件夹 2 执行相同操作,依此类推。

答案1

假设当前目录只包含您想要压缩的子目录,那么最简单的方法是:

for d in *; do zip -r $d.zip $d; done

然而,如果您再次运行仍有 zip 文件的文件,您将得到一堆.zip.zip包含先前文件的文件。

因此,让我们跳过非目录,并在执行此操作时防止目录名称中出现空格:

for d in *; [ ! -d "$d" ] || do zip -r "$d.zip" "$d"; done

如果你坚持不要在 zip 文件的顶层有子目录(如果你问我,这是一种不好的做法,但我是一个 Linux 黑客),我们需要跳转到目录(比 更受欢迎的另一个原因tarzip

for d in *; do
    [ -d "$d" ] && pushd "$d" && zip -r "../$d.zip" . && popd || true
done

其内容如下tar

for d in *; do
    [ ! -d "$d" ] || tar -czf "$d.tgz" -C "$d" .
done

或者tar -cJf "$d.tar"在那里使用以进行大规模(但缓慢)的xz压缩。

相关内容