写入磁盘并同时使用 xz 进行压缩

写入磁盘并同时使用 xz 进行压缩

我有一个程序在磁盘上写入痕迹,并且大小变得非常大。通常,我使用以下命令。

./run output.txt
xz output.txt

我可以在写入output.txt的同时通过管道传输xz吗?

我读如何动态(递归地)将所有文件从 gzip 转换为 xz?,但我不确定它是否适用于我的情况。

答案1

如果您./run在没有给出文件参数的情况下将其输出输出到 stdout(这是 Unix/Linux 中的惯例),那么您可以简单地使用:

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

如果它需要文件名参数,但如果可以很好地写入管道,那么您可以使用特殊设备,例如/dev/stdout/dev/fd/1(两者应该是等效的),如下所示:

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

或者你可以使用流程替代,这通常在大多数现代 shell 中可用,例如 bash、zsh 或 ksh,最终将使用/dev/fd幕后的设备来完成相同的任务:

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

最后一个也需要./run能够写入管道,但如果./run写入到管道,它应该比其他管道工作得更好output.txt 在正常操作中重定向到 stdout,在这种情况下,如果将两者都重定向到 stdout,输出将会混淆。

程序通常可以写入管道,但其中一些程序可能想要查找并倒回到输出文件中的偏移量,这在管道中是不可能的。如果是这种情况,那么写入临时文件然后压缩它可能就是您所能做的。

相关内容