Unix zip コマンドは、新しいアーカイブを作成するのではなく、既存のアーカイブを更新します。

Unix zip コマンドは、新しいアーカイブを作成するのではなく、既存のアーカイブを更新します。
$(which zip) -r ../data.zip .

フォルダの内容は時間の経過とともに動的に変更されるため、最初にhuge.pdfインクルードファイルでテストしてから削除しましたが、まだdata.zip同じサイズを維持しました。解凍すると、huge.pdfそこにあるファイルを見ることができます。

zipコマンドで既存のアーカイブを完全に上書きしたいと思います。

私のアプリケーション(nodejs)でこのシェルコマンドを実行しています。

編集:リンクされた質問が重複しているようではありません。

答え1

まずzip、through実行は$(which zip)as実行と同じであることに注意してくださいzip。このwhichユーティリティは、ユーザーパスでプログラムファイルを探します。

既存のZipアーカイブが与えられるzip次へ追加新しいファイル、変える既存のファイルですが、そうではありません。削除ファイルシステムから削除された場合はアーカイブのファイルです。

Zipアーカイブからファイルを削除するには:

$ zip -d archive.zip filename

もちろん、rmアーカイブを再作成する前に削除することもできます。

NodeJSスクリプトの場合は、次のものを使用できます。

rm -f ../data.zip && zip -r ../data.zip .

アーカイブが存在しない場合でも、このフラグは失敗-fしません。rmrm

答え2

zipコマンドのヘルプトピックに示すように、次のようになります。

デフォルトの動作は次のとおりです。追加または交換リストのzipファイルエントリ

huge.pdfこれは、デフォルトの動作にzipファイルのファイルの削除が含まれていない理由と、そのファイルがそのまま残っている理由を示しています。

既存のアーカイブを完全に上書きするには、新しい一時zipファイルを作成して古いファイルを置き換えることができます。また、whichコマンドの呼び出しが不要なようであるため、コマンドは次のようにする必要があります。

zip -r temp.zip . ; mv temp.zip ../data.zip

関連情報