解压缩压缩文件时,如何仅获取目标文件夹中的完全解压缩文件?

拉拉尔夫

我正在尝试解压缩一个大的zip文件,其中包含一百多个文件,每个文件128 MB。当解压缩中断时,我必须删除正在解压缩的最后一个文件,然后重新启动并选择跳过已启用的现有文件的选项,如下所示:

unzip -n my_compressed_file.zip -d destination

有没有一种方法可以解压缩zip文件,以便只有那些完全解压缩的文件才会出现在目标目录中?

吉格纳卡

您可以编写一个包装脚本,将文件提取到一个临时位置,并仅在完成后才将其移动到最终位置。就像是

tempdir="incomplete/"

mkdir -p "$tempdir"
zipinfo -1 compressed.zip | while read f ; do
        test -f "$f" && continue # skip anything extracted by a previous attempt
        printf "extracting %s..." "$f"
        unzip -p compressed.zip "$f" > "$tempdir/$f"
        printf "done!\n"
        mv "$tempdir/$f" "$f"
done
rm -r "$tempdir"

如果此操作被中断,那么您仍然会有部分文件,但是当再次运行它时,它将跳过完整的文件(在正确的位置)并立即覆盖部分文件(在临时目录中)。最终到达归档文件的末尾时,它将完全删除临时目录。

我的示例脚本有一些限制。它假定zip不包含其自身的目录结构,并使用incomplete/工作文件夹内的临时目录如果这是不可接受的,则必须

  • 使用的另一个值tempdir,该位于同一文件系统上的某个位置(以允许atomic mv),并保证不会被任何其他进程使用,并且
  • mkdir在循环内添加一个附加步骤,以重建提取的目录结构

另请参见在我的fs上mv是原子的吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章