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


19

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

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


1
这个问题带有gzip标记,但文本指向zip,您可以澄清吗?(根据不同的格式,答案在方法上有所不同。)
HåkanLindqvist

我无法将zip添加到使用gzip的原因中。如果您有可以解决此问题的gzip方法,也可以使用它。
Vishnu

Answers:


21

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

从“ zip”手册页(“ man zip”):

(...)

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

(...)

-s splitsize
--split-size splitsize

分割大小是一个数字,可以选择后面跟一个乘数。
当前数字必须是整数。乘数
当前可以是k(千字节),m(兆字节),g(千兆字节)
或t(兆字节)之一。由于最小拆分大小为64k,因此
不带乘数的数字默认为兆字节。例如,要创建
一个名为foo的拆分归档文件,其中
带有670 MB拆分内容的bar 目录的内容对于
在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

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

(...)

因此,您首先使用“ -s 0”开关“取消分割” ZIP文件

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

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

$ unzip unsplit.zip


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

会给你一些文件:

archive.tar.gzaa

archive.tar.gzab

...

然后可以将其解压缩:

cat archive.tar.* | tar -xzvf -

2

这是我对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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.