親ディレクトリを含めずにファイルを圧縮する


12

複数のファイルを含むフォルダがあります

フォルダ

  • Artifact1.app
  • Artifact2.ext2
  • Artifact3.ext3
  • ...

私の目標はcd、フォルダーdirを含めずに、このフォルダーの外側から(コマンドを使用せずに)ファイルを圧縮することです。

zip -r ./folder/artifact.zip ./folder/artifact1.app

このコマンドは、最終的なzipにフォルダーdirを含めます。ヒントはありますか?

関連質問:フォルダー自体を含めずにフォルダーの内容を圧縮します


1
マニュアルページから、それ-jは適用されるだけのようであり、それはすべてのフォルダをZIP内の単一のルートレベルのディレクトリに圧縮します。それはあなたが探しているものではありませんよね?
phyrfox 2015年

@phyrfox多分そうです。確認する必要があります。ありがとう。
Lorenzo B

回答:


13

すべてのファイルを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シンボリックリンクを保存しません。


あなた(明示的にサブディレクトリ内のすべてのファイルを表示する必要はありませんfolder)、あなただけのワイルドカードを使用することができ、すなわちzip -j folder/*
ヤクブKukul

シェル展開に依存するということは、ドットファイル(など.profile)がアーカイブに含まれないことを意味します。代わりに、現在の作業ディレクトリを変更し、指定し.、アーカイブするファイルとして:cd folder && zip -r ../folder.zip .
sheldonh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.