tarに別の「トップレベル」名をどのように指定しますか?

tarに別の「トップレベル」名をどのように指定しますか?

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

ありがとうございます!✌️

関連情報