ログファイルを処理するシェルスクリプトを作成しています。時々ファイルが圧縮されている可能性があり、ファイル名に適切なサフィックスが含まれています。
この場合、ファイル処理パイプラインに解凍を追加したいと思います。
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.