tarルート(/)をtarアーカイブに/ abcとして表示したいと思います。
カスタムトップレベル名を指定するためのtarフラグはありますか?
答え1
私が見つけることができる最も近いのは--transform
オプションです。わかりませんが、これがGNU専用フラグのようです。
--transform, --xform EXPRESSION
use sed replace EXPRESSION to transform file names
sed
これを使用して交換コマンドを渡し、次/
のように変更できます/abc
。
tar cf root.tgz --transform 's/^\//\/abc/' /
/
アーカイブを作成すると、パスは引き続き印刷されますが、/abc
アーカイブを抽出するとパスになります。
tar
そのオプションがない場合、--transform
別のアプローチは/abc
シンボリックリンクを作成して/
tarすることです。
$ ln -s / /abc
$ tar chf root.tgz /abc
これは人々にリンクをたどるように-h
指示するので重要です。tar
-h, --dereference
follow symlinks; archive and dump the files they point to
/abc
これは最上位ディレクトリに設定される効果があります。
答え2
GNU tarを使用すると、次のコマンドを使用できます。
tar --transform="s|/|/abc/|" -Pcf bar.tar /
それ以外の場合は、GNUや他の特定のtar拡張には依存しませんが、すべてのUnix互換システムで利用可能なPOSIXツールに基づく移植可能なアプローチは次のとおりです。
pax -w -s '/\//\/abc\//' -f foo.tar /
答え3
私がする方法は次のとおりです。 (/だけでなく)任意の場所で熱い効果を発揮することができます。
tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *
/abc/
各パスの先頭にaを追加します。
答え4
@terdonの素晴らしい答えに基づいて、より「説教的な」例...
tar -czf "MY_NEW_FOLDER_NAME.tar.gz" --transform "s/^\.\/MY_FOLDER_NAME/MY_NEW_FOLDER_NAME/" "./MY_FOLDER_NAME"
重要:^\.\/MY_FOLDER_NAME
宛先ディレクトリ「./MY_FOLDER_NAME」へのパスを正確に反映する必要があります。
正規表現を書くことができます。 SED準拠のオンラインエスケープ文字そしてGNU sed REPL。
ありがとうございます!✌️