如何压缩有大小限制的文件?

如何压缩有大小限制的文件?

我有一个脚本,用于从文件夹中压缩文件。我想确保压缩文件不超过 10 MB。如果大小超过 10MB,它应该创建另一个 ZIP 文件。

是否有任何命令(或其他方法)可以用于此?

答案1

您可以使用“分割档案“ 的功能 ”压缩“本身使用”--分割大小“ 选项。

来自“zip”手册页(“ man zip”):

(...)

分割档案的一个用途是将大型档案存储在多个可移动
媒体上。对于包含 20 个分割文件的分割档案,文件通常
命名为(将 ARCHIVE 替换为您的档案名称)ARCHIVE.z01
、ARCHIVE.z02、...、ARCHIVE.z19、ARCHIVE.zip。请注意,
最后一个文件是 .zip 文件。

(...)

-s 拆分大小
--拆分大小 拆分大小

分割大小是一个数字,后面可以跟一个乘数。
当前数字必须是整数。乘数
当前可以是 k(千字节)、m(兆字节)、g(千兆字节)
或 t(兆兆字节)之一。由于 64k 是最小分割大小,因此
没有乘数的数字默认为兆字节。例如,要创建
一个名为 foo 的分割档案,其中包含 bar 目录的内容
,分割大小为 670 MB,可能对刻录到 CD 有用
,命令如下:

                zip -s 670m -r foo bar

可用于。

所以,创建拆分 zip 档案,您可以执行以下操作(“ -r”是“递归”开关,用于包含目录的子目录):

$ zip -r -s 10m archive.zip directory/

解压缩文件," zip" 手册页解释说您应该使用 "-s 0`" 开关:

(...)

 zip -s 0 split.zip --out unsplit.zip

将把拆分档案转换为单文件档案。

(...)

所以你首先“取消拆分” ZIP 文件使用“-s 0”开关:

$ zip -s 0 archive.zip --out unsplit.zip

...然后你解压未分割的文件:

$ unzip unsplit.zip

答案2

tar -czvf - /path/to/files | split -b 10M - archive.tar.gz

将会给你一些文件:

archive.tar.gzaa

archive.tar.gzab

...

然后可以使用以下命令解压缩:

cat archive.tar.* | tar -xzvf -

答案3

以下是我对 5GB 文件的操作方法(按照 OP 的要求,分成 1GB 和 10MB)...

例子:要拆分5GB 文件进入1GB 文件复制到 FAT32 USB(文件名为“FIVE_GB_FILE.ISO”)

步骤1:压缩文件(不压缩,与源文件位于同一目录)

zip -0 FIVE_GB_FILE.ZIP FIVE_GB_FILE.ISO

第2步:将 5GB 的 zip 文件拆分为 1GB 的 zip 文件

zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.ZIP

瞧...您应该有以下 1GB 文件(以及原始文件,以及步骤 1 中的 zip 文件)

SPLIT_5GB_FILES.zip
SPLIT_5GB_FILES.Z01
SPLIT_5GB_FILES.Z02
SPLIT_5GB_FILES.Z03
SPLIT_5GB_FILES.Z04

相关内容