使用 7zip 更新档案中的所有文件

使用 7zip 更新档案中的所有文件

我正在使用 7zip(7za.exe)的命令行版本。

我在文件夹中有以下文件:

7za.exe
1.txt 
test.zip

test.zip1.txt在其压缩文件夹结构中包含多次出现。

我需要 7zip 使用 7za.exe 中的 1.txt 文件来更新(覆盖)test.zip 中的所有 1.txt

可以这样做吗?命令是什么?我试过了7za.exe u test.zip 1.txt,但这只更新了存档中根文件夹中的 1.txt,但没有更新内部文件夹。

答案1

您可以通过开关指定文件-si并从 stdin 读取。使用脚本,您可以更新所有文件。但对我来说,只有当存档类型为 7z 时,它才有效。示例:

$ 7z l test.7z 
7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
(...)
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2016-04-20 17:20:08 ....A            2            8  1.txt
2016-04-20 17:20:08 ....A            2               dir1/1.txt
2016-04-20 17:20:08 ....A            2               dir2/1.txt
2016-04-20 17:20:16 D....            0            0  dir2
2016-04-20 17:20:14 D....            0            0  dir1
------------------- ----- ------------ ------------  ------------------------
                                     6            8  3 files, 2 folders

$ 7z u test.7z -sidir1/1.txt < 1.txt

$ 7z l test.7z 
(...)
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2016-04-20 17:20:08 ....A            2            9  1.txt
2016-04-20 17:20:08 ....A            2               dir2/1.txt
2016-04-20 17:22:08 .....            4            9  dir1/1.txt
2016-04-20 17:20:16 D....            0            0  dir2
2016-04-20 17:20:14 D....            0            0  dir1
------------------- ----- ------------ ------------  ------------------------
                                     8           18  3 files, 2 folders

在 7-Zip 9.20 和 15.14 的文档中:

注意:当前版本的 7-Zip 仅支持从标准输入读取 xz、lzma、tar、gzip 和 bzip2 档案。

LZMA 是 7z 存档类型的默认压缩方法。我尝试过-mm=lzmazip 存档,但没有成功。

答案2

7zip -u 选项确实会更新存档,但它会尊重文件夹结构。为了更新所有文本文件,您需要重新创建文件夹结构并将文本文件放在适当的位置,然后使用更新选项压缩整个文件夹。

如果您想多次更新 1.txt 文件并轻松更新所有文件,您可以使用mklink创建到此 1.txt 文件的连接,这样您只需更新文件一次。

相关内容