ファイルの圧縮を自動的に解くためにshにコードを書く方法は?

ファイルの圧縮を自動的に解くためにshにコードを書く方法は?

ログファイルを処理するシェルスクリプトを作成しています。時々ファイルが圧縮されている可能性があり、ファイル名に適切なサフィックスが含まれています。

この場合、ファイル処理パイプラインに解凍を追加したいと思います。

case "$file" in:
*.gz)  READER="gzip -cd" ;;
*.bz2) READER="bzip2 -cd" ;;
...
*)     READER="cat" ;;
esac
$READER < $file | processing

これは効果がありますが、ファイルを解凍するときにcat無駄に呼び出されるので、気にしません。この場合、ファイルを直接開きたいです。

< $file processing

一部を使っevalて作ってみましたが、めちゃくちゃになりました。|$READER処理試用版としてのパイプも動作します...

どんな提案がありますか?

ベストアンサー1

私が提案しているのは、猫の不要な使用(「UUOC」)について心配する理由がないことです。

この場合、「役に立たない」目的ではありません。cat特別なケースを処理するために追加のコード行を書く必要がないように、基本的なフィルタとして非常に便利な目的を提供します。

不必要な複雑さはUUOCよりも悪いプログラミング「犯罪」です。

しかし、これがcat本当に面倒な場合は、ucatツールセットを使用してunp車輪を再発明することを避けることができます。 unpホームページはないようですが、少なくともDebianとUbuntu用にパッケージ化されています(現在のDebian開発者Eduard Blockが管理しています)。

Package: unp
Version: 2.0~pre7+nmu1
Installed-Size: 133
Maintainer: Eduard Bloch <[email protected]>
Architecture: all
Suggests: bzip2, unrar | unrar-free, xdms, p7zip | p7zip-full, unzip, cabextract,
orange
Description-en: unpack (almost) everything with one command
 unp is a small perl script which makes extraction of any archive files
 a bit easier. It support several compressors and archiver programs,
 chooses the right one(s) automatically and extracts one or more files
 in one go.
 .
 You may also want to install some non-free packages like "unace-nonfree",
 "unrar-nonfree" and "lha" to extract archives of these types.

おすすめ記事