問題は、圧縮またはプレーンテキストのデータベースダンプがいくつかあることです。ファイルの拡張子などに違いはありません。圧縮されていないファイルでzcat
を使用すると、出力ではなくエラーが発生します。
取得する入力のタイプを検出するのに十分スマートな別のcat
種類のツールはありますか?
-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
ファイル)。
移植可能な単純な提案の1つは、zgrep
の代わりにzcat
を使用し、すべての行に一致する検索パターンを使用することです。
zgrep $ some-file
zcat
とは異なり、zgrep
は非圧縮ファイルを問題なく処理します。 man zgrepから:
zgrep - search possibly compressed files for a regular expression
GNU gzip
を使用すると、zcat file 2> /dev/null || cat file
を実行できます。これはPOSIX標準ではなく、BSD gzip
では機能しません。実際に修正する必要がありますすべてのgzip
pedファイルに.gz
拡張子が付くようにシステムを変更します(もちろん、プレーンテキストファイルには.gz
を含む任意の拡張子が付くことがあります)。
コメントからの私の結論を回答として追加するには、最も互換性のある方法は
gzip -cdf [ name ... ]
これは、zless
およびzgrep
が内部で行う方法でもあります。
バッシュの代替:
for filename in *;do #Replace with your actual loop
case $filename in
*.gz) gunzip <"$filename";;
*) cat "$filename";;
esac
done