hay*_*art 3 linux compression shell gzip stream
我有很多数据进入gzip.数据是连续的,所以没有结束.当我使用C ^ c停止程序并尝试解压缩时,我收到有关文件末尾的错误.我怎样才能得到压缩输出文件?原因是我希望在计算机重新启动,拔出插头等时保存我的数据.
$ yes | gzip > out.gz
$ gzip -d out.gz
gzip: blah.gz: unexpected end of file
我不喜欢gzip.
由于存储了压缩数据 - 如果突然中断,您必须准备丢失与当前滑动窗口相对应的一些数据块(几KB).没有提到你的磁盘/操作系统可能有大容量缓存的事实,如果停电会导致更大的损失.
为了它的价值,我启动了以下命令,在某些时候打断它:
sh$ yes | nl | tee >(cat > master) >(compress >out.Z) > /dev/null
^C
Run Code Online (Sandbox Code Playgroud)
现在,在文件中master
我有原始(未压缩)数据,并在out.Z
相应的压缩数据中.或者这是你可能期望的.但是,比较主文件和从压缩文件中提取的数据,您会注意到最后缺少一些记录:
sh$ tail -3 master
11937063 y
11937064 y
119370
sh$ uncompress -c out.Z | tail -3
11936691 y
11936692 y
11
Run Code Online (Sandbox Code Playgroud)
如果我没错,那就是缺少372(非常短)的线.从wc
我发现,在该特定运行中对应于4 kiB.
sh$ U=$(uncompress -c out.Z | wc -c)
sh$ R=$(wc -c < master)
sh$ echo $(((R-U)/1024))
4
Run Code Online (Sandbox Code Playgroud)
多次重复测试,我的结果介于0KiB和8KiB之间.重复测试但是通过ctrl-z(休眠)中断,我的结果高达24-28 kiB(我猜 SIGSTOP不会刷新一些缓存,而SIGINT会这样做).
根据您的需要,这可能是也可能是不可接受的.并记住这只是按^ C/^ Z中断.我敢打赌,如果停电,结果可能会最糟糕......