vlambda博客
学习文章列表

Linux下zcat命令详解及C/C++代码实现

如果一个压缩文件非常大,而您只想查看文件的内容是什么。由于在这种情况下,文件的解压将花费大量时间,因此为了节省时间并在不解压文件的情况下查看文件,可以使用zcat命令。

zcat 命令

通常 zcat 用于查看由 gzip 压缩实用程序创建的文件。zcat 将命令行中列出的文件或由标准输入输入的数据解压,解压后的数据写到标准输出。

Zcat 命令的语法:

zcat [选项] [名称]

选项
       -a --ascii
              Ascii文本模式:按本地习惯转换行结束符。该选项仅在一些非Unix   系统上有效。   对于MSDOS,在压缩时CR  LF(译注:即回车和换行符)被转换为LF,在解压时LF被
              转换为CR LF。

       -c --stdout --to-stdout
              将结果写到标准输出;原文件保持不变。如果有多个输入文件,输出将由一系列 独立的压缩文件组成。如果想得到较好的压缩率,在压缩前应将多个文件连在一起。

       -d --decompress --uncompress
              解压缩。

       -f --force
              强制压缩和解压缩,即使指定文件具有多重连接,或相应文件已经存在,或压缩数据            来自或写往一个终端。            如果输入数据是            gzip
              无法识别的格式,同时在命令行中也给出了--stdout选项,gzip将把输入数据拷贝至标准       输出而不做任何改动,就象cat所做的一样。      如果未给出      -f
              选项,并且未在后台运行, gzip 会提示用户以确认是否覆盖一个已存在的文件。

       -h --help
              显示帮助信息然后退出。

       -l --list
              列出每个压缩文件的如下项目:

zcat将两个参数作为选项和文件名。提供最终结果以显示压缩文件内容而不解压缩文件。

创建了 test.txt 文件并在 gzip 的帮助下对其进行压缩。在 zcat 命令的帮助下,我们能够读取压缩文件的内容。

如果您尝试使用标准 cat 命令查看test.txt.gz其内容,您将看到一个乱码输出:

Linux下zcat命令详解及C/C++代码实现

zcat 命令主要使用两个组件,即选项和压缩文件名。任何最终用户或客户端何时会触发 zcat 命令?zcat 命令将接受输入作为选项,将压缩文件作为标准输入,并将压缩文件内容作为标准输出显示。

注意:zcat 实用程序仅适用于 gzip 或 gunzip 压缩文件。 如果它可以与 tar 压缩技术一起使用,它将无法工作。

Linux下zcat命令详解及C/C++代码实现

zcat 多个压缩.gz文件查看

在 zcat 命令中,我们具有在同一命令中同时查看多个压缩文件的功能。

Linux下zcat命令详解及C/C++代码实现

按照上面的 zcat 命令,我们可以同时读取压缩文件的个数。从数据目录中,我们同时读取两个压缩文件,即 test.txt.gz  test1.txt.gz。

zcat 强制文件查看

在 zcat 命令中,无论文件是否压缩,我们都具有显示文件内容的功能。要强制打印满足要求的文件,我们需要在 zcat 命令中使用“-f”选项。

Linux下zcat命令详解及C/C++代码实现

即使内容是二进制或加密形式,这也会显示文件的内容。

zcat 获取打印压缩信息

在 zcat 命令的帮助下,我们可以得到文件的压缩信息。要打印压缩信息,我们需要在 zcat 命令中使用“-l”选项。

Linux下zcat命令详解及C/C++代码实现compressed size:  压缩文件的长度 

uncompressed size:  压缩前文件的长度 

ratio: 压缩率(如果未知则为0.0%) 

uncompressed_name: 压缩前的文件名

按照上面的命令,我们可以找到压缩文件的压缩状态。我们正在使用其中一个文件,即 file.txt.gz。压缩信息将显示压缩的、未压缩的比率信息以及压缩文件名。

zcat 压制所有警告信息

有时在打印任何压缩数据时,会出现大量警告。为了避免这种情况,我们需要在 zcat 命令中使用“-q”选项。


可以在 zcat 命令中使用“-q”选项来避免警告。

zcat命令代码实现

int main(int argc, char *argv[])
{
 gzFile zfp;

 /* 保存程序名称并跳过  */
 prog = argv[0];
 argc--, argv++;

 /* 忽略任何开关  */
 while (*argv && (**argv == '-')) 
 {
  argc--, argv++;
 }

 if (argc == 0
 {
  zfp = gzdopen(STDIN_FILENO, "rb");
  if (zfp == NULL)
   error("can't gzdopen stdin");
  gz_uncompress(zfp, STDOUT_FILENO);
  return 0;
 }

 do 
 {
  /* file_uncompress(*argv); */
  zfp = gzopen(*argv, "rb");
  if (zfp == NULL
  {
   error("can't gzopen `%s'", *argv);
   _exit(EXIT_FAILURE);
  }
  gz_uncompress(zfp, STDOUT_FILENO);
 } while (argv++, --argc);
 return 0/* 避免警告  */
}

编译运行:

总结

毫无疑问,如果您只想查看压缩文件的内容,zcat 命令可以节省您的时间。 有关更多信息,请访问其手册页。