我正在使用 7zip(7za.exe)的命令行版本。
我在文件夹中有以下文件:
7za.exe
1.txt
test.zip
test.zip
1.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=lzma
zip 存档,但没有成功。
答案2
7zip -u 选项确实会更新存档,但它会尊重文件夹结构。为了更新所有文本文件,您需要重新创建文件夹结构并将文本文件放在适当的位置,然后使用更新选项压缩整个文件夹。
如果您想多次更新 1.txt 文件并轻松更新所有文件,您可以使用mklink
创建到此 1.txt 文件的连接,这样您只需更新文件一次。