すべてのファイルをfolder
ディレクトリを表示せずに名前で保存する場合は、この-j
オプションを使用できます。
zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3
または
zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}
サブディレクトリにファイルがある場合、それらもアーカイブにディレクトリコンポーネントを持ちません。たとえばfolder/subdir/foo
、としてアーカイブに保存されますfoo
。
しかし、おそらくディレクトリに変更する方が簡単でしょう。これは、ブレースメソッドとほぼ同じタイプのタイピングです。その場合、サブディレクトリにファイルを含めると、変更先のディレクトリからの相対パスにfolder/subdir/foo
なりますsubdir/foo
。たとえば、として保存されます。
(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)
インタラクティブに使用する場合、シェルはzip
コマンドを実行したときに別のディレクトリにいることをシェルが認識していないため、この方法でシェルの完了を失います。これを修正するには、cd
コマンドを個別に発行します。前のディレクトリに簡単に戻るには、pushd
およびを使用できますpopd
。
pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd
zipファイルに保存されているパスを完全に制御したい場合は、シンボリックリンクのフォレストを作成できます。特に指示がない限り、zip
シンボリックリンクを保存しません。
-j
は適用されるだけのようであり、それはすべてのフォルダをZIP内の単一のルートレベルのディレクトリに圧縮します。それはあなたが探しているものではありませんよね?