【问题标题】:gzip: unexpected end of file when using gzipgzip:使用 gzip 时文件意外结束
【发布时间】:2020-09-18 22:35:49
【问题描述】:

我必须使用我的 Linux 机器处理文件。

当我尝试将输出写入 csv 文件时,然后将其 gzip 压缩到同一行脚本中:

processing > output.csv | gzip -f output.csv

我收到“文件意外结束”错误。即使我使用 Linux 机器下载文件,我也会遇到同样的错误。

当我不通过终端(或单行)gzip 时,一切正常。

为什么命令都在一行时会这样失败?

【问题讨论】:

    标签: linux sh gzip


    【解决方案1】:

    当您使用 > 运算符重定向进程的 IO 时,其输出不能被管道使用(因为不再有“输出”可通过管道传输)。你有两个选择:

    1. processing > output.csv &&
      gzip output.csv
      

      将程序未处理的输出写入文件output.csv,然后在第二个任务中压缩此文件,将其替换为output.gz。根据数据量,这可能不可行(存储要求是完整的未压缩输出加上压缩大小)

    2. processing | gzip > output.csv.gz
      

      这将在线压缩您的进程的输出并将其直接写入输出文件,而不会将未压缩的输出存储在中间文件中。

    【讨论】:

      【解决方案2】:

      你应该删除> output.csv

      您可以:

      • 使用管道:| 或:
      • 重定向到文件

      对于同一个流(stdout)

      您可以将错误从标准错误重定向到带有2>errors.txt 的文件,否则它们将显示在屏幕上

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      相关资源
      最近更新 更多