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