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

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

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

フォルダ

  • アーティファクト1.app
  • アーティファクト2.ext2
  • アーティファクト3.ext3
  • ...

cd私の目標は、フォルダdirを含まず、そのフォルダ外のファイルをコマンドを使用せずに圧縮することです。

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

このコマンドには、最後のzipのフォルダディレクトリが含まれています。どのようなヒントがありますか?

関連質問:フォルダ自体を含まずにフォルダコンテンツを圧縮する

ベストアンサー1

ディレクトリを指定せずにすべてのファイルをその名前で保存する場合は、このオプションを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/foosubdir/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シンボリックリンクは保存されません。

おすすめ記事