我有一个在磁盘上写入跟踪的程序,并且大小变得非常大。通常,我使用以下命令。
./run output.txt
xz output.txt
我可以在编写 output.txt 的同时对 xz 进行管道传输吗?
我阅读了如何动态地将所有文件从 gzip 转换为 xz(并且递归地)?,但我不确定它是否适用于我的情况。
我有一个在磁盘上写入跟踪的程序,并且大小变得非常大。通常,我使用以下命令。
./run output.txt
xz output.txt
我可以在编写 output.txt 的同时对 xz 进行管道传输吗?
我阅读了如何动态地将所有文件从 gzip 转换为 xz(并且递归地)?,但我不确定它是否适用于我的情况。
如果您
./run
将在没有给出文件参数的情况下将其输出生成到标准输出(这在 Unix/Linux 中很常见),那么您可以简单地使用:如果它需要一个文件名参数,但如果它可以写入管道,那么您可以使用特殊设备,例如
/dev/stdout
or/dev/fd/1
(两者应该是等效的),如下所示:或者您可以使用进程替换,这通常在大多数现代 shell(如 bash、zsh 或 ksh)中都可用,最终将使用
/dev/fd
幕后的设备来完成相同的操作:最后一个也需要
./run
能够写入管道,但如果在正常操作中./run
写入output.txt
和写入标准输出,它应该比其他工作更好,在这种情况下,如果将两者都重定向到标准输出,输出会混淆。程序通常可以写入管道,但其中一些可能想要在输出文件中查找和倒回偏移量,这在管道中是不可能的。如果是这种情况,那么写入临时文件然后压缩它可能就是您所能做的。