如何更新zip存档中的单个文件? (令人惊讶的是,我无法在现有线程中找到信息)。
假设我有一个some.zip存档,我想用我系统上的/path/on/my/linux/file1.txt替换存档中的路径/ in / zip / file1.txt
以下命令对我不起作用: zip -f some.zip path / in / zip / file1.txt /path/on/my/linux/file1.txt
答案 0 :(得分:2)
您基本上有 3 选项更新存档:添加,更新和刷新< / em>的
add Update existing entries and add new files. If the archive does not exist create it. This is the default mode. update (-u) Update existing entries if newer on the file system and add new files. If the archive does not exist issue warning then create a new archive. freshen (-f) Update existing entries of an archive if newer on the file sys‐ tem. Does not add new files to the archive.
后两个可能或可能不会更新存档,具体取决于文件和存档的相对时间戳。我的猜测是出于某种原因你有关于这个问题的问题。存档中的时间戳可能错误吗?或者文件系统之间存在一些差异?
无论如何,要更新ZIP存档而不考虑文件时间戳,您只需使用没有标志的zip
命令。这是一个示例会话,演示了:
1)创建档案:
sylvain@bulbizarre:/tmp/u$ echo a | tee f1 | tee f2 > f3
sylvain@bulbizarre:/tmp/u$ zip f.zip f1 f2 f3
adding: f1 (stored 0%)
adding: f2 (stored 0%)
adding: f3 (stored 0%)
2)更改文件并更新存档
sylvain@bulbizarre:/tmp/u$ echo b > f2
sylvain@bulbizarre:/tmp/u$ zip f.zip f2
updating: f2 (stored 0%)
3)提取并检查存档的内容
sylvain@bulbizarre:/tmp/u$ unzip f.zip
Archive: f.zip
replace f1? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
extracting: f1
extracting: f2
extracting: f3
sylvain@bulbizarre:/tmp/u$ cat f?
a
b
a
答案 1 :(得分:2)
如果您需要更换和重命名,则可能需要发出几个命令。因此,假设您要通过path/in/zip/b
替换存档中的path/on/linux/b
(将原始名称保留在存档中):
# Delete original
zip -d f.zip path/in/zip/b
# Add new
zip f.zip path/on/linux/b
# Rename
printf "@ path/on/linux/b\n@=path/in/zip/b" | zipnote -w f.zip
&#34;重命名&#34;的替代语法部分,某种程度上更具可读性(至少对我来说):
zipnote -w f.zip << EOF
@ path/on/linux/b
@=path/in/zip/b
EOF