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

Vis*_*hnu 29 linux bash gzip

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

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

ric*_*ues 38

您可以使用“ --split-size ”选项使用“ zip ”本身的“ split archive ”功能。

从“zip”联机帮助页(“ man zip”):

(……)

拆分档案的一种用途是在多次删除时存储大型档案?
能媒体。对于具有 20 个拆分文件的拆分存档,文件是典型的吗?
已命名(用您的存档名称替换 ARCHIVE) AR?
CHIVE.z01、ARCHIVE.z02、...、ARCHIVE.z19、ARCHIVE.zip。请注意,
最后一个文件是 .zip 文件。

(……)

-s splitsize
--split-size splitsize

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

                zip -s 670m -r foo bar
Run Code Online (Sandbox Code Playgroud)

可用于。

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

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

要解压缩文件,“ zip”联机帮助页说明您应该使用“-s 0`”开关:

(……)

 zip -s 0 split.zip --out unsplit.zip
Run Code Online (Sandbox Code Playgroud)

将拆分存档转换为单文件存档。

(……)

因此,您首先使用“-s 0”开关“解开”ZIP 文件

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

...然后解压缩未拆分的文件:

$ unzip unsplit.zip


小智 10

tar -czvf - /path/to/files | split -b 10M - archive.tar.gz
Run Code Online (Sandbox Code Playgroud)

会给你一些文件:

archive.tar.gzaa

archive.tar.gzab

...
Run Code Online (Sandbox Code Playgroud)

然后可以解压缩:

cat archive.tar.* | tar -xzvf -
Run Code Online (Sandbox Code Playgroud)


Jay*_*arm 5

这是我对 5GB 文件的处理方式(按照 OP 的要求分为 1GB 和 10MB)...

示例:5GB 文件拆分为1GB 文件以复制到 FAT32 USB(文件名“FIVE_GB_FILE.ISO”)

第 1 步:压缩文件(不压缩,与源目录相同)

zip -0 FIVE_GB_FILE.ZIP FIVE_GB_FILE.ISO
Run Code Online (Sandbox Code Playgroud)

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

zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.ZIP
Run Code Online (Sandbox Code Playgroud)

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

SPLIT_5GB_FILES.zip
SPLIT_5GB_FILES.Z01
SPLIT_5GB_FILES.Z02
SPLIT_5GB_FILES.Z03
SPLIT_5GB_FILES.Z04
Run Code Online (Sandbox Code Playgroud)