Você pode especificar o arquivo pelo comutador -si
e ler de stdin. Com um script você pode atualizar todos os arquivos. Mas funcionou para mim apenas quando o tipo de arquivo é 7z. Exemplo:
$ 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
Na documentação do 7-Zip 9.20 e 15.14:
Note: The current version of 7-Zip support reading of archives from stdin only for xz, lzma, tar, gzip and bzip2 archives.
LZMA é o método de compactação padrão para o tipo de arquivo 7z. Eu tentei -mm=lzma
para o arquivo zip, mas não funcionou.