【问题标题】:Zip directory in different batches不同批次的zip目录
【发布时间】:2021-06-07 16:31:10
【问题描述】:

我正在尝试压缩一个包含图像的大型目录,这些图像将被输入深度学习系统。这非常耗时,所以我想提前停止使用Ctrl + C 的压缩过程,并以不同的“批次”压缩目录。

目前我正在使用zip -r9v folder.zip folder,我看到-u 选项允许更新更改的文件并添加新文件。

如果我使用Ctrl + C 终止进程,我担心某些文件或 zip 本身最终会损坏。从this answer我了解到cp可以安全终止,this other answer暗示gzip也是安全的。

综上所述:提前结束zip 命令是否安全? -u 选项是否适用于不同批次的压缩?

【问题讨论】:

  • zip 是否还能在图片上获得回报?尤其是zip -9 似乎是在浪费这个输入数据的时间。

标签: bash shell zip


【解决方案1】:

提前结束 zip 命令是否安全?

在我的测试中,使用 CtrlC 取消 zip(Info-ZIP,2008 年 6 月 16 日(v3.0))并没有在全部,即使已经压缩的数据是 2.5GB。因此,我会说 CtrlC 是“安全的”(你最终不会得到一个损坏的文件,但也毫无意义(你做了所有的工作都是徒劳的)。

-u 选项是否适用于不同批次的压缩?

是的。 Zip 存档单独压缩每个文件,因此您以后添加文件所获得的存档与一次运行添加所有文件一样好。请记住,启动zip 也需要时间。因此,将批量大小设置为可以接受的高以节省时间。

这是一个脚本,可将您的所有文件添加到 zip 存档中,但有机会在每 100 个文件处停止压缩。

#! /bin/bash
batchsize=100
shopt -s globstar
files=(folder/**)
echo "Press enter to stop compression after this batch."
for ((startfile=0; startfile<"${#files[@]}"; startfile+=batchsize)); do
  ((startfile==0)) && u= || u=u
  zip "-r9v$u" folder.zip "${files[@]:startfile:batchsize}" 
  u=u
  if read -t 0; then
    echo "Compression stopped before file $startfile."
    echo "Re-run this script with startfile=$startfile to continue".
    exit
  fi
done

为了提高速度,您可能需要研究替代的 zip 实现。

【讨论】:

  • 我在shell脚本方面一点也不擅长,所以非常感谢代码,它会很有帮助。关于评论:您说得有道理,我将探索不同的选项并尝试将它们放入脚本中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多