![如何自动压缩目录中每个子文件夹的内容?](https://linux22.com/image/1199711/%E5%A6%82%E4%BD%95%E8%87%AA%E5%8A%A8%E5%8E%8B%E7%BC%A9%E7%9B%AE%E5%BD%95%E4%B8%AD%E6%AF%8F%E4%B8%AA%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%9F.png)
我希望自动压缩目录中每个子文件夹(不包括子文件夹本身)的内容,每个 .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 黑客),我们需要跳转到目录(比 更受欢迎的另一个原因tar
)zip
:
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
压缩。