小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

フォルダ内の子フォルダ削除(rmtree)の留意点

Perlでフォルダ内のファイルもフォルダもファイルが格納されているフォルダも問答無用で削除するにはFile::Pathモジュールのrmtreeを使います。
組み込み関数のrmdirもありますが、こちらは、削除しようとしているフォルダ内にファイルやフォルダがある場合は削除ができません。


以下のサンプルは、rmtreeでフォルダのみを削除するサンプルです。

◆rmtreeのサンプルソース

use strict;
use warnings;
use File::Path;

#chdir('./xxx'); # カレントフォルダを合わせる
opendir(DIR, './') or die "opendir失敗 $!";
my @list = grep(-d, readdir(DIR));
for my $wkdir (@list) {
    if (($wkdir ne '.') and ($wkdir ne '..')) {
        #print $wkdir, "\n";
        if (rmtree($wkdir)) {
            print "$wkdir Delete.\n";
        }
        else {
            print "$wkdir rmtree Error: $!\n";
        }
    }
}

留意点として3つ

  • 『.』自フォルダと『..』親フォルダは削除しないこと。(実は私はやったことがありません)
  • 削除したいフォルダの親フォルダをchdirでカレントフォルダにすること。
  • デフォルトでのカレントフォルダは、スクリプトの実行フォルダになっている。


尚、本スクリプトの実行には、ご自分の責任で細心の注意を払って行ってください。
間違ってフォルダを削除しても、当方では一切の責任は取りかねますのでご了承下さい。