【问题标题】:Combine files in one将文件合并为一个
【发布时间】:2012-08-02 20:52:41
【问题描述】:

目前我在这个目录中-

/data/real/test

当我在命令提示符下执行ls -lt 时。我得到下面的东西-

REALTIME_235000.dat.gz
REALTIME_234800.dat.gz
REALTIME_234600.dat.gz
REALTIME_234400.dat.gz
REALTIME_234200.dat.gz

如何在Unix中将上述五个dat.gz files合并为一个dat.gz file而不丢失任何数据。我是 Unix 新手,对此我不确定。谁能帮我解决这个问题?

更新:-

我不确定是否应该解压缩五个文件中的每一个然后合并为一个最好的方法?或者 将所有five dat.gz 合并为一个dat.gz

【问题讨论】:

    标签: linux unix gzip solaris sunos


    【解决方案1】:

    如果可以以随机顺序连接文件内容,那么以下命令就可以解决问题:

    zcat REALTIME*.dat.gz | gzip > out.dat.gz
    

    更新

    这应该可以解决订单问题:

    zcat $(ls -t REALTIME*.dat.gz) | gzip > out.dat.gz
    

    【讨论】:

    • zcat *.gz | gzip > out.dat.gz 我试过这样做。对于所有五个文件,我都收到了这个错误REALTIME_EXPORT_v1x0_20120801_9_T_234000_234200.dat.gz.Z: No such file or directory 。为什么会这样?
    • @Nevzz03 我无法重现此问题。我在 linux 上使用 bash 和相同的文件名。
    • @Nevzz03 您使用的是 Solaris 而不是 Linux?如果是这样,请改用gzcat *.gz | gzip > out.dat.gz。 Solaris 上的zcat 实用程序与不同的压缩套件(compressdecompress)一起使用,它使用.Z 作为后缀而不是.gz。这也可能是其他非 Linux Unixen(AIX 等)的情况......
    • 如果您看到我上面的评论,文件名后面会附加额外的Zdat.gz.Z为什么会这样?
    • 请参阅 Mark Adler 的回答。速度快约 1000 倍,更正确。
    【解决方案2】:

    当您对结果进行压缩时,您希望发生什么?如果您希望这五个文件重新出现,那么您需要使用 gzip (.gz) 格式以外的其他格式。您需要使用 tar (.tar.gz) 或 zip (.zip)。

    如果您希望 gunzip 的结果是原始文件的 gunzip 的串联,那么您可以简单地将文件组合在一起(不是 zcat 或 gzcat)。 gunzip 然后将它们解压缩为一个文件。

    cat [files in whatever order you like] > combined.gz
    

    然后:

    gunzip combined.gz
    

    将产生一个输出,它是原始文件的 gunzip 的串联。

    完全没有必要将它们全部解压缩然后重新压缩为一个流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-12
      • 2016-12-28
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      相关资源
      最近更新 更多