web-dev-qa-db-ja.com

Info-Zipで更新する代わりに既存のZipファイルを上書きする方法は?

Tarと同じように新しいZipファイルを取得するには、Zipを実行する前にrm foo.Zipを実行する必要がありますか?

$ mkdir foo; touch foo/bar
$ Zip -r foo.Zip foo
  adding: foo/ (stored 0%)
  adding: foo/bar (stored 0%)
$ rm foo/bar; touch foo/baz
$ Zip -r foo.Zip foo
  adding: foo/ (stored 0%)
  adding: foo/baz (stored 0%)
$ unzip -l foo.Zip
Archive:  foo.Zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2011-10-27 07:49   foo/
        0  2011-10-27 07:49   foo/bar
        0  2011-10-27 07:49   foo/baz
---------                     -------
        0                     3 files
33
asari

-FSオプションを使用して「ファイル同期」

Zip -FSr foo.Zip foo

これにより、フォルダー内の新しいファイルがZipに追加され、フォルダー内にないファイルがZipから削除されます。

35
Paul

-FSオプションを使用する(または古いZipファイルを削除する)代わりの方法は、overwriteZipをstdoutに書き込み、それを指定ファイル:

Zip -r - foo >foo.Zip

-r       : Add directory and its contents
-        : Instead of writing Zip to a file, write to stdout
foo      : The directory to be zipped
>foo.Zip : Redirect stdout to file foo.Zip

foo.Zipが存在する場合は、シェルリダイレクトによって上書きされます。つまり、毎回100%の時間で新しいZipファイルを取得できます。 ????

2
mxxk