私はMacOSコンピュータを使用しています(tarコマンドはBSDのようです)。私が読んだところによると、-s
BSD 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~"
有効で名前a
をx/y
。
バックスラッシュエスケープ(\/
、、\057
または\x2f
)が機能しないように見えるため、パターン自体で必要とされていない一部の文字を区切り文字として選択する必要があります。