• ベストアンサー

Perl:あるファイル名が指定のリスト(テキストファイル)になければ、そのファイルを消去するというのを作りたいのですが。

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コマンドをつけずに消去された人たちのものが実際存在する人たちのものと混在しているため消したいと言うのが動機です。

質問者が選んだベストアンサー

  • ベストアンサー
  • astronaut
  • ベストアンサー率58% (303/516)
回答No.1

私が同じことをするなら,こんな感じでしょうか. お題目:存在しないユーザーのmailスプールを削除したい. #!/bin/bash for file in /var/spool/mail/*; do user=`basename $file` if ! grep $user /etc/passwd ; then rm -f $file fi done

daipot
質問者

お礼

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

その他の回答 (1)

  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.2

私もshの方が向いてると思いますが、一応Perl版も書いてみます。 $dir = '/var/spool/mail/'; open (IN,'/home/admin/user-name.txt'); $in{$_}++; while <IN>; close (IN); ($in{$_} || unlink $dir.$_) while (glob $dir.'*'); #動くかどうかテストしてないのです。

daipot
質問者

お礼

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

関連するQ&A