stdout / pipeでcpを使用できますか?

stdout / pipeでcpを使用できますか?

さて、奇妙に聞こえるかもしれませんが、我慢してください。cpブロックデバイスの内容をコピーし、パイプを介してすぐにgzip圧縮したいと思います。これを作成するために使用できますかcp?できることを知っていますが、dd最初からこのようなパイプラインを作成することが可能かどうかを知りたかったですcp

答え1

通常の状況では、標準出力が記録されないcpため使用できませんが、次のものを使用できます。cpcat

cat device-file | gzip -c >some-output-file

この場合、権限のないユーザーのシェルセッションからデバイスにアクセスするには、プレフィックスまたは同様のコマンドが必要になる可能性がcatあるため、これを使用することをお勧めします。sudoルートシェルにいる場合(理由が何であれ、ほとんど絶対的ではありません)

gzip -c <device-file >some-output-file

動作します。

答え2

名前付きパイプを作成し、ここにデバイスをコピーできます。

mkfifo /tmp/mypipe
cp device-file /tmp/mypipe

次に、gzipを並列に開始する別のシェルを開き、パイプからデータを読み取り、出力ファイルに書き込みます。

gzip </tmp/mypipe >outfile.gz

完了したら、名前付きパイプを削除できます。

rm /tmp/mypipe

関連情報