基本上,我发现p7zip首先扫描要压缩的目录,然后以单个 zip 格式压缩这些文件。
考虑以下场景,我有数百 GB 的文件和文件夹,它们首先被扫描以进行压缩。假设我在完成扫描后删除了一个文件。我不知道文件在完成扫描时如何丢失,但在生产中看到了这种行为,所以在我的本地机器上,我自己删除了它。在这种情况下,它会引发以下错误并无限期地卡住。
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,6 CPUs Intel(R) Core(TM) i5-9500T CPU @ 2.20GHz (906EA),ASM,AES-NI)
Scanning the drive:
29741 folders, 48865 files, 5035919485 bytes (4803 MiB)
Creating archive: /home/mymachine/Downloads.zip
Items to compress: 78606
WARNING: No such file or directory
/var/webarch/data/fs-root/538/2022/05/20/19964
那么,p7zip 或 hack 中是否有任何标志可用于忽略这些警告并继续压缩?就像,我们可以忽略扫描后丢失的一些文件,而不是在生产中抛出超时错误。
这在错误报告 #2099 中提到, 如果在 从 2017 年创建 zip 存档时删除了文件,则 7z 会挂起。
开发商承诺修复它,但没有。
他确实提供了一种解决方法,即添加 switch
-mmt1
,它将线程数设置为一 (1)。显然,当其中一个线程找不到文件时,多线程冲突导致挂起,并且只有一个线程可以避免挂起。