- ベストアンサー
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コマンドをつけずに消去された人たちのものが実際存在する人たちのものと混在しているため消したいと言うのが動機です。
- みんなの回答 (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
その他の回答 (1)
- zebedeer
- ベストアンサー率66% (80/121)
私もshの方が向いてると思いますが、一応Perl版も書いてみます。 $dir = '/var/spool/mail/'; open (IN,'/home/admin/user-name.txt'); $in{$_}++; while <IN>; close (IN); ($in{$_} || unlink $dir.$_) while (glob $dir.'*'); #動くかどうかテストしてないのです。
お礼
ありがとうございます。この件に関してはシェルでやることにしましたが、perlの方は別の目的で応用が利きそうです。
お礼
ありがとうございます。試してみましたところ、ばっちり目的が果たせました。simple is bestなのでこっちを今後も使わせていただきます。