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其内容,您将看到一个乱码输出:
zcat 命令主要使用两个组件,即选项和压缩文件名。任何最终用户或客户端何时会触发 zcat 命令?zcat 命令将接受输入作为选项,将压缩文件作为标准输入,并将压缩文件内容作为标准输出显示。
注意:zcat 实用程序仅适用于 gzip 或 gunzip 压缩文件。 如果它可以与 tar 压缩技术一起使用,它将无法工作。
zcat 多个压缩.gz文件查看
在 zcat 命令中,我们具有在同一命令中同时查看多个压缩文件的功能。
按照上面的 zcat 命令,我们可以同时读取压缩文件的个数。从数据目录中,我们同时读取两个压缩文件,即 test.txt.gz test1.txt.gz。
zcat 强制文件查看
在 zcat 命令中,无论文件是否压缩,我们都具有显示文件内容的功能。要强制打印满足要求的文件,我们需要在 zcat 命令中使用“-f”选项。
即使内容是二进制或加密形式,这也会显示文件的内容。
zcat 获取打印压缩信息
在 zcat 命令的帮助下,我们可以得到文件的压缩信息。要打印压缩信息,我们需要在 zcat 命令中使用“-l”选项。
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 命令可以节省您的时间。 有关更多信息,请访问其手册页。