for でぶん回して clamscan

恥ずかしながらファイルサーバ内にマクロウィルスを発見。メールはプロバイダがスキャンしているので、これは基本的にリムーバブルメディアを介して入ってきたんだろうなぁ。

さて、ここから先が問題。ファイルサーバは Mac で動いているので Windows では認識できないファイル名などが散在している。運良く手元の機械は OS X だが、とりあえず今回のマクロウィルスに感染する可能性のある Excel のファイルのリストを作成するにはどうしたらよいか?

とりあえず Information List という Classic アプリに頼ったが、今なら Unix 系のアプリと AppleScript でなんとかなるかもしんない。AppleScript はまったく経験がないので今回は Information List でタイプ、クリエータ情報まで含めてリストを生成し、改行コードを lf に変換して awk でそれらに対して検索を掛け、Excel ファイルだけのフルパスのリストを作成する。1Classic Mac の世界では拡張子は文化として存在しないのでタイプ、クリエータに対して検索を掛ける必要があるのと、リストがタブ区切りで生成されるのが分かっているので、こういう場合は awk がすごい便利。

そうしてできあがったリストに対して今度はスキャンを掛けるのだが、Information List の吐くリストは Classic 流で、フォルダの区切りに : が使われているので

sed -e 'y/\/:/:\//'

で / と : を入れ替えて clam に食わす。しかしここでリストを

for i in `cat list`; do clamscan $i; done

ってやると「半角スペースを含んだ名前が分割されちゃって正しくスキャンできない」。慌てた私はファイルのリストに対してエスケープを書き加えてみたが、これは間違い。正解は

IFS=$'\n'

とシェル変数を設定し、「改行だけを for 文のパラメータの区切りにする」ことで対処するのが簡単。

ログは -l でログファイル名を指定して吐くよりリダイレクトした方がなんだか望みの形になったのでそうした。

で、問題のファイルを特定したら対処開始だ。ここから先は今回のテーマじゃないので割愛。フルスキャン掛けないと意味ないんじゃねーのってゆー正論も今回は無視。2

★ OS X で作業するときはファイル名は Unicode なので普段の作業の都合上 EUC に設定している人は注意。

  1. 便利だけどまどろっこしい。 

  2. NAS に移行完了すればこんな面倒なプロセスは全部省けるのだが。 

More