web-dev-qa-db-ja.com

圧縮されていなくてもzcat出力テキストを作成することは可能ですか?

問題は、圧縮またはプレーンテキストのデータベースダンプがいくつかあることです。ファイルの拡張子などに違いはありません。圧縮されていないファイルでzcatを使用すると、出力ではなくエラーが発生します。

取得する入力のタイプを検出するのに十分スマートな別のcat種類のツールはありますか?

19
rsk82

-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

zcatがGNU(または最近のBSDのようにGNUエミュレート))でなく、知っている場合は、gzip -dcfではなくzcat -fを使用してください。 .Zファイル)。

25

移植可能な単純な提案の1つは、zgrepの代わりにzcatを使用し、すべての行に一致する検索パターンを使用することです。

zgrep $ some-file

zcatとは異なり、zgrepは非圧縮ファイルを問題なく処理します。 man zgrepから:

zgrep - search possibly compressed files for a regular expression
10
godlygeek

GNU gzipを使用すると、zcat file 2> /dev/null || cat fileを実行できます。これはPOSIX標準ではなく、BSD gzipでは機能しません。実際に修正する必要がありますすべてのgzippedファイルに.gz拡張子が付くようにシステムを変更します(もちろん、プレーンテキストファイルには.gzを含む任意の拡張子が付くことがあります)。

5
fkraiem

コメントからの私の結論を回答として追加するには、最も互換性のある方法は

gzip -cdf [ name ... ]

これは、zlessおよびzgrepが内部で行う方法でもあります。

2
David Ongaro

バッシュの代替:

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