如何通过命令行压缩文件夹中的所有文件并删除未压缩的版本?

如何通过命令行压缩文件夹中的所有文件并删除未压缩的版本?

我有一个备份磁盘,其中包含文件的未压缩版本,我想对其进行压缩以节省该磁盘上的空间。磁盘(包含要压缩的文件)已满(大约 3TB,其中 17GB 可用空间)。是否有一个命令或脚本可以运行来遍历磁盘中的每个文件并压缩它,同时删除未压缩的版本。例如,如果我有像 f1 f2 f3 这样的文件夹,我想最终只得到 f1.tar.gz f2.tar.gz f3.tar.gz,并删除原始未压缩的文件夹,以便我在驱动器中有更多空间?另外,它也适用于子文件夹吗?

编辑:我希望尽可能地压缩文件而不冒损坏的风险。大约有 150 个父目录,大多数有 10 到 50 个子文件夹,其中一些包含已经压缩的文件。作为一个简化的示例,我的文件结构如下所示:

Parent folders:
parent1 parent2 parent3

其中每个可能有类似的内容:

child1 child2 child3 file1.zip

每个人都可能有

file1 file2.zip file2.tar.gz file3

当然,有些父文件夹只包含没有子文件夹的文件。我想做的是从 bash 运行脚本或使用 tar 放入命令来压缩父文件夹,如下所示:

parent1.tar.gz parent2.tar.gz parent3.tar.gz

在删除未压缩的父文件夹时,因此该命令首先会压缩parent1.tar.gz(假设我有足够的空间用于同一硬盘上的tarball文件),然后它将删除它,因此文件结构如下所示

parent1.tar.gz parent2 parent3,

然后该命令将对parent2和parent3执行相同的操作,最终文件结构为:

parent1.tar.gz parent2.tar.gz parent3.tar.gz

如果可能的话,最好知道如何将此操作扩展到子文件夹,但如果这太复杂或不会节省太多额外空间,则没有必要。如果知道一种方法可以按每个文件占用的空间顺序对文件进行排序,以了解在有足够的空间可用以自动执行该过程之前需要单独压缩多少个文件,这也很好。不需要。

答案1

有人可能有一个脚本(或编写一个)。我做这类事情要么使用zip, 要么一个脚本它使用 gzip 或 bzip2。两者都有在归档完成后删除文件的规定。

问题是

  • 您当然可以为每个目录编写压缩档案
  • 在归档完成之前,您无法删除该目录
  • 您无法更新压缩存档,例如,通过向其中添加文件。

所以你必须有足够的可用空间来创建第一个存档,并逐渐获得足够的空间来写入更大的存档。想必您没有很多压缩文件(例如 png、jpg、pdf)。否则你将无法获得空间。

如果不是因为空间不足的可能性很大,问题将只是要压缩/删除的目录上的脚本循环。然而,对于 3Tb 的 17Gb 可用空间,某些目录可能变得相当大。您必须进行一些分析,看看这是否会干扰概述的简单解决方案。

进一步阅读:

相关内容