【问题标题】:Zip files into multiple zip files with maximum length将文件压缩成具有最大长度的多个 zip 文件
【发布时间】:2015-11-28 23:53:55
【问题描述】:

我有一个包含数千个文件的目录。这些文件每个大约有 10 到 100 Kb。现在我正在寻找一种将这些文件压缩到 ZIP 档案中的方法。但是有一些限制。

  • 每个 ZIP 档案的最大大小为 4 MB。
  • 档案需要单独提取,因此不能拆分和联系大的 ZIP 文件。
  • 我已绑定到 ZIP。 TAR、RAR、DAR 等不是一个选项。 :(

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

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

【问题讨论】:

  • 作为替代方案,您是否想过创建一个 zip 文件(如果可能的话)并使用 zipsplit 拆分成更小的 zip 文件?
  • @Component10 哇,哇。这正是我想要的。非常感谢!

标签: bash shell zip batch-processing zsh


【解决方案1】:

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

#!/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

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 2018-02-24
    • 2017-03-28
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多