元のファイルの絶対パス情報を保持するアーカイブファイルを生成したいのですが、タルボクタンを発生させない方法が見つかりませんでしたか?
具体的には、これらのファイル(*.zipや*.tgzなど)を含む(圧縮)アーカイブを作成したいとします。
/usr/share/foo/bsd/config.yaml
/usr/share/foo/linux/config.yaml
/usr/share/foo/windows/config.yaml
...ソースファイルのフルパスにエンコードされた情報を保存したいです。
理想的には、アーカイブを抽出するときに次のファイルを生成する必要があります。
./<BASENAME>/usr/share/foo/bsd/config.yaml
./<BASENAME>/usr/share/foo/linux/config.yaml
./<BASENAME>/usr/share/foo/windows/config.yaml
...ここでは、<BASENAME>
アーカイブファイルのデフォルト名(拡張子を除く)を示します。
これを行う1つの方法は、./<BASENAME>/usr/share/foo/{bsd,linux,windows}
ディレクトリを作成し、そのディレクトリ内の適切なファイルへのシンボリックリンクを作成し、ディレクトリアーカイブ./<BASENAME>
(ディレクトリリンクにエントリを追加するときにシンボルが逆参照されるようにするために必要なフラグを含みます。 )アーカイブを作成することです。 )rm -rf ./<BASENAME>
アーカイブファイルの準備ができたら実行します。
それほど難しい方法はありますか?
答え1
私のアプローチは次のようになります。
tar -Pczvf ./test.tgz /usr/share/foo/{bsd,linux,windows}
GNU TAR を使用:
-P: 絶対名
-c: 生成
-z: gzip 圧縮
-v: 詳細出力
-f: アーカイブのファイル名
これにより、埋め込みファイルへの絶対パスを含む圧縮アーカイブが提供されます。その後、使用するライブラリにアーカイブを抽出する-C
か、次のコマンドを再度使用してファイルを絶対位置に抽出できます-P
。
tar -xzvf ./test.tgz -C $BASENAME
tar -Pxzvf ./test.tgz
答え2
次の相対パスを試すことができます。
cd /
tar cvf path/to/tar_file.tar usr/share/foo/{bsd,linux,windows}/config.yaml
したがって、パスの前にスラッシュはありません。