将文件压缩为多个zip文件,最大长度

时间:2015-09-03 08:29:41

标签: bash shell zip batch-processing zsh

我有一个包含数千个文件的目录。这些文件各约为十到一百Kb。现在我正在寻找一种方法将这些文件压缩成ZIP档案。但是有一些限制。

  • ZIP存档的最大大小为4 MB。
  • 档案需要单独提取,因此拆分和联系大型ZIP文件不是一种选择。
  • 我一定要ZIP。 TAR,RAR,DAR等不是一种选择。 :(

大多数文件已经采用某种压缩格式(例如图像)。因此可以假设zip文件的大小与其提取内容的总和大小相同。

我正在考虑使用Bash / ZSH循环文件,同时保留文件名数组和文件大小之和。一旦超过最大文件总大小,我想压缩文件名数组中的文件并继续使用新数组和文件大小计数器。

1 个答案:

答案 0 :(得分:0)

您可以将文件添加到存档,并在每次迭代时测试其大小。然后,如果大小超出限制,请从存档中删除最后一个文件并创建一个新文件。

#!/bin/bash
count=1
for file in *;
do
  zip "archive$count.zip" "$file"
  archivesize=$(wc -c < "$file")
  if (( archivesize>2*1024*1024  )); then
    zip -d "archive$count.zip" "$file"
    ((count++))
    zip "archive$count.zip" "$file"
  fi
done