ログファイルを処理すると、一部はgzipファイルに圧縮されますが、logrotate
一部はそうではありません。したがって、次のことを試してみると:
$ zcat *
次のコマンドラインが作成され、zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gz
その後に次のように表示されます。
gzip: xyz.log: not in gzip format
file
これがどのように機能するかと同様に、マジックバイトを取得し、結果を使用またはzcat
依存して出力をパイプするためのツールがありますか?cat
grep
注:スクリプトを書くことができることを知っていますが、そのためのツールがすでにあるかどうかを尋ねたいと思います。
答え1
-f
または、以下を試してください--force
。
zcat -f -- *
zcat
単に実行される単純なスクリプトだからです。
exec gzip -cd "$@"
長いオプションを次のように変換できます。
exec gzip --stdout --decompress "$@"
man gzip
そして(強調)によると:
-f--強制 ファイルに複数のリンクがある場合でも、強制圧縮または解凍 そのファイルがすでに存在するか圧縮されたデータ 端末から読み込むか、端末に書き込みます。入力データが特定の形式ではない場合 --stdout オプションも指定すると、gzip として認識されコピーされます。 標準出力を変更せずにデータを入力します。zcatが猫のように振る舞う。
返品:
これにより、出力を
grep
パイプすることができます。
あなたはそれを使用することができますzgrep
:
zgrep -- PATTERN *
しかし、以下のStéphaneのコメントを参照してください。
答え2
zless
これは不幸なようですzcat
。 libzには、圧縮ファイルと圧縮されていないファイルの透過的な読み取りをサポートするAPIがあるためです。しかしマンページzcat
にはこれがgunzip -c
。
答え3
私は同じ目的に使用します:
{ cat /var/log/messages ; zcat /var/log/messages*.gz ; }| grep something | grep "something else" ....
答え4
これはzcatがバイナリであるRHEL 5.xでうまく機能します。 zcatがスクリプトであるRHEL 6.x(およびUbuntu 12.x)では失敗します。これ使用されるスムーズに動作します。
zcatの使い方はまったくわかりませんが、zgrepも圧縮されていないファイルを正しく処理しません。