ディスクへの書き込みと同時にxzで圧縮

ディスクへの書き込みと同時にxzで圧縮

ディスクにトレースを書き込むプログラムがありますが、サイズが非常に大きくなります。通常、次のコマンドを使用します。

./run output.txt
xz output.txt

output.txtの作成中にxzをパイプできますか?

私は読んだすべてのファイルをgzipからxzに動的に(再帰的に)変換するには?しかし、私の場合はうまくいくかわかりません。

答え1

./runファイル引数(Unix / Linuxの規則)を指定せずに出力をstdoutとして印刷する場合は、単に次のものを使用できます。

./run | xz -c >output.txt.xz

ファイル名引数が必要ですが、パイプに問題なく書き込むことができる場合は、次のように、または/dev/stdout同じ特殊デバイスを使用できます/dev/fd/1(両方とも同じである必要があります)。

./run /dev/stdout | xz -c >output.txt.xz

またはあなたは使用することができますプロセスの交換通常、bash、zsh、kshなどのほとんどの最新のシェルで利用可能なものは、最終的に同じ操作を実行する/dev/fdために背後にあるデバイスを使用します。

./run >(xz -c >output.txt.xz)

最後の項目も./runパイプに書き込む必要がありますが、./runパイプに書き込むと他のものよりもうまく機能します。output.txt そして通常の操作ではstdoutにリダイレクトされます。この場合、両方ともstdoutにリダイレクトされると出力が混乱します。

プログラムは通常パイプに書き込むことができますが、その一部はパイプでは不可能なオフセットを見つけて出力ファイルに巻き戻したいと思うかもしれません。この場合、一時ファイルに書き込んでから圧縮することがおそらくできるすべてです。

関連情報