プロが教える店舗&オフィスのセキュリティ対策術

RHL9.0を使ってます。/var/spool/mail/以下に次のようなファイルがあったとします。
taro hanako daisuke yukie

また、/home/admin/user-name.txtというファイルには次のように書かれています。
taro
hanako


このとき、perlを用いて/var/spool/mailディレクトリからuser-name.txtに名前のない人のファイルを消去するというスクリプトを作りたいのですが。おそらくif
文を使うと思うのですがどうすればよいでしょう。$userという変数にuser-name.txtの一つ一つを代入してWhile文でまわすことはできてます。後は「$userという名前のファイルが/var/spool/mail以下になかったらsystem("rm /var/spool/mail/$user");を実行する。」とするだけです。

ちなみに、userdelを-rコマンドをつけずに消去された人たちのものが実際存在する人たちのものと混在しているため消したいと言うのが動機です。

A 回答 (2件)

私が同じことをするなら,こんな感じでしょうか.



お題目:存在しないユーザーのmailスプールを削除したい.

#!/bin/bash

for file in /var/spool/mail/*; do
user=`basename $file`
if ! grep $user /etc/passwd ; then
rm -f $file
fi
done
    • good
    • 0
この回答へのお礼

ありがとうございます。試してみましたところ、ばっちり目的が果たせました。simple is bestなのでこっちを今後も使わせていただきます。

お礼日時:2003/08/10 11:41

私もshの方が向いてると思いますが、一応Perl版も書いてみます。



$dir = '/var/spool/mail/';
open (IN,'/home/admin/user-name.txt');
$in{$_}++; while <IN>;
close (IN);
($in{$_} || unlink $dir.$_) while (glob $dir.'*');

#動くかどうかテストしてないのです。
    • good
    • 0
この回答へのお礼

ありがとうございます。この件に関してはシェルでやることにしましたが、perlの方は別の目的で応用が利きそうです。

お礼日時:2003/08/10 11:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!