Linux:zipアーカイブを作成するときに最上位ディレクトリを指定する


17

通常のディレクトリ構造(src /、bin /、...)のプロジェクトがあります。

project-name/
|-- bin
|-- lib
|-- src
`-- Makefile

そして、次のディレクトリ構造でアーカイブを作成したいと思います。

project-name-version/
|-- bin
|-- lib
|-- src
`-- Makefile

これを行うためのきちんとした方法はありproject-name/ますzip -r ...か?それは、一時ディレクトリを別の場所に作成し、その一時ディレクトリを最終的に呼び出している内部にファイルをコピーすることを回避しますか?

(基本的に、何らかの種類のパスプレフィックスまたは相対パスオプションを探しています。)

回答:


9

たぶんこれはすでにあなたに起こったかもしれませんが、なぜすべてをコピーするのではなく単にsymリンクを使用しないのですか?

ln -s project-name project-name-version

次にzip -r、symリンクを使用zipします(デフォルトでsymリンクを逆参照しますか?)完了したらrm、単純にsymリンクを使用できます。おそらく最もエレガントなソリューションではないかもしれませんが、私はそれをzip直接やり遂げる明白な方法を知りません。


1
これtarは、-hフラグを使用する場合にも機能します。
カイルストランド

zフラグも使用しています。それが影響するかどうかはわかりません。)
カイルストランド

15

これは答えよりもアドバイスです:Gitを使用してください!

プロジェクトにGitリポジトリを設定すると、全体が非常に簡単になります。

git archive HEAD --prefix=project-name-version/ \
    --format=zip -o project-name-version.zip

1
素晴らしいアドバイス、ありがとう。gitアーカイブドキュメント:git-scm.com/docs/git-archive
Meglio

1
バージョン管理を使用することは良い考えですが、この答えは一般的なケースの質問と一致しません。
ライムエ

@Raim「これは答えよりもアドバイスです。Gitを使用してください!」4年のようなので、そこに書かれた、...それを指摘してくれてありがとう
サイラス

1
これが回答として意図されていない場合は、コメントに変換する必要があります。
ライムエ

1
@Gregor私はそのようなファイルは、とにかくあなたは、という名前のファイルを作成し、例えば、Gitの属性を使用することができ、実際にプロジェクトの一部であるとして、それは望ましい行動だと思う.gitattributes含有しました.git* export-ignore
cYrus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.