Tar 参照は 1 レベルのみ

Tar 参照は 1 レベルのみ

私はインストールしたソフトウェアのTARを作成するために次の疑似スクリプトを使用します

mkdir tmp
ln -s /path/to/app1/bin              tmp/app1
ln -s /and/path/going/to/the-app-2   tmp/app2
tar -c --dereference -f apps.tar tmp

--dereferenceここで、 で作成したリンクをたどるオプションが必要ですtmp。 そもそもリンクを作成する理由は、アーカイブ内のディレクトリをファイルシステム上とは異なる名前で保存するためです。

/path/to/app1これまでは問題なく動作していました。しかし、リンクも含まれており、それらをたどりたくないという状況に陥っています。

コマンドを少し変更すればこれは可能でしょうかtar? それとも、アーカイブの構築方法を完全に変更する必要がありますか?

答え1

部分的な参照解除だけを行う方法はないと思います。次のようにすることができます。

tar -cf apps.tar /path/to/app1/bin /and/path/going/to/the-app-2

そして、-Cを使用して別のルートに抽出します

-C, --directory=DIR

         change to directory DIR

例えば

mkdir tmp
tar -C tmp -xf apps.tar

これは、現在アーカイブを作成する方法と同様の効果をもたらします。

-C を使用して既存のディレクトリを指定することもできます。

答え2

tarball 内のディレクトリ構造をディスク上のものと異なるものにする必要が本当にあるのでしょうか?

そうでない場合は、そのまま tar で圧縮することができます。

tar -cf file.tar /path/1 /path/2

答え3

リンクする代わりに、コピーすることもできます。残念ながら、オーバーヘッドがさらに増えてしまいます (ファイルが大きいため)。もちろん、tar 自体もコピーの一種なので、最大で 2 倍の大きさになります。

答え4

そのroot場合、最善の方法は、マウントの bind コマンドを使用して、tar で圧縮するディレクトリにシンボリックリンクを作成するのではなく、ハードリンクすることです。そうすれば、参照解除オプションを使用する必要はありません。

mkdir tmp
mount --bind /path/to/app-1 tmp/app-1
mount --bind /path/to/app-2 tmp/app-2
tar cf apps.tar tmp

何か事故が起きる前に、必ずこれらのディレクトリをアンマウントしてください。これらの警告

関連情報