tarアーカイブを使用する場合、pwdのすべての内容をサブディレクトリに移動/変換

tarアーカイブを使用する場合、pwdのすべての内容をサブディレクトリに移動/変換

私はMacOSコンピュータを使用しています(tarコマンドはBSDのようです)。私が読んだところによると、-sBSD tarのスイッチはGNU tarのスイッチと同じです--transform

私は次のコマンドを持っています:

tar -zcf foo.tgz -s /^"$(pwd)"/"$(pwd)/package"/ "$(pwd)"

私がやりたいことは、foo.tgzというファイルにすべてを保存し、「package」というサブディレクトリにすべてを置くことです。

次のエラーが発生します。

tar: 無効な代替フラグ a

私は-sオプションが正しくないと思いますが、それが何であるかはわかりません。

最終的に出力がfoo.tgzというファイルではなくstdoutに書き込まれるようにしたいので、そのファイルも更新したい場合はそうしてください。ありがとうございます。

答え1

代替パターンと置換の区切り文字として使用されるスラッシュとディレクトリ区切り文字として使用されるスラッシュとの間の暗黙的な競合に注意してください。たとえば、現在のディレクトリが次の場合、提供する/foo/bar文字列tarは次のようになります。

/^/foo/bar//foo/bar/package/

パターンは代替品と^見なされfoo、残りはフラグと見なされます。ここでは、次のエラーが発生しますb

tar: Invalid replacement flag b

幸いなことにtar、私のMacではスラッシュ区切り文字の代わりに他の文字を受け入れるので、たとえば完全なパス~名をパターンに簡単に入れることができます。たとえば、-s "~^a$~x/y~"有効で名前ax/y

バックスラッシュエスケープ(\/、、\057または\x2f)が機能しないように見えるため、パターン自体で必要とされていない一部の文字を区切り文字として選択する必要があります。

関連情報