即使未压缩,是否可以使 zcat 输出文本?

即使未压缩,是否可以使 zcat 输出文本?

问题是我有一些数据库转储,它们要么是压缩的,要么是纯文本的。文件扩展名等没有区别。zcat在未压缩的文件上使用会产生错误而不是输出。

是否有另一种cat工具能够足够智能地检测它获得的输入类型?

答案1

只需添加该-f选项即可。

$ echo foo | tee file | gzip > file.gz
$ zcat file file.gz
gzip: file: not in gzip format
foo
$ zcat -f file file.gz
foo
foo

(如果您不是 GNU(或像现代 BSD 中那样的 GNU 模拟)并且只知道文件,请使用gzip -dcf代替)。zcat -fzcat.Z

答案2

一个可移植的简单建议是使用zgrep代替zcat,并且仅使用与每一行匹配的搜索模式。

zgrep $ some-file

与 不同的是zcatzgrep它将愉快地处理未压缩的文件。来自 man zgrep:

zgrep - search possibly compressed files for a regular expression

答案3

有了 GNU,gzip你就可以做到zcat file 2> /dev/null || cat file。这不是 POSIX 标准,并且不适用于 BSD gzip,您确实应该修复您的系统,以便所有gzipped 文件都具有.gz扩展名(当然纯文本文件可能具有任何扩展名,包括.gz)。

答案4

Bash 中的另一种选择:

for filename in *;do #Replace with your actual loop
    case $filename in
    *.gz) gunzip <"$filename";;
    *)    cat "$filename";;
    esac
done

相关内容