tar コマンドへの入力としてファイルをパイプする方法

tar コマンドへの入力としてファイルをパイプする方法

次のコマンドを使用してパイプされた tar ファイルを解凍しようとすると、次のエラーが発生します。

$ git archive --format=tar 0af62b1 | tar -xf -C /the/path/here/
tar: -C: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now

最初の部分はgit archive --format=tar 0af62b1、画面に表示される tar ファイルを出力します。この出力は、パラメータを使用してファイルにキャプチャできます--output file_name

2 番目の部分では、ファイルの内容を指定されたパスに抽出しようとしています。 別々に実行すると、両方とも正常に動作し、git archive 0af62b1 --output file_nameその後に が続きますtar -xf file_name -C /the/path/here/

この場合、なぜパイピングが不可能なのでしょうか。また、特定のコマンドがパイプ入力を受け入れるかどうかをどのように確認すればよいのでしょうか。

答え1

標準入力と同義の にパイプしてみます。またはもっと簡単に言うと(gitは デフォルトのファイルです)。tar -xf - -C /the/path/here/-tar -xC /the/path/here-

答え2

問題はエラー出力に示されています:

$ git アーカイブ --format=tar 0af62b1 | tar-xf -C/the/path/here/
tar:-C: 開けません:そのようなファイルまたはディレクトリ
tar はありません: エラーは回復できません: 終了します

存在しない -C という名前のファイルを使用するように tar に指示しているため、失敗します。

正常に動作するケースでは、存在する file_name という名前のファイルを指定して、すべてが動作します。

考えられる修正: コマンドから「-f -C」を削除します。

関連情報