• ベストアンサー

フォルダ以下にファイルがあるか否か

フォルダ(tmp)下にファイルが一つでも存在すれば、 フォルダ以下全てのファイルを削除、 ファイルがなければスルー、 というようなプログラムを作りたいのですが可能でしょうか? Perlバージョンは5.6.1です。 以上、よろしくお願いいたします。

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

  • ベストアンサー
  • Hasty
  • ベストアンサー率73% (19/26)
回答No.2

> globでtmpフォルダ以下の一覧を取得し、 > それがファイルなら削除する > と言うような意味合いでしょうか はい、そうです。もっと丁寧に書くと、 foreach $entry (glob("tmp/*")) {   if (-f $entry) {     unlink $entry;   } } って感じです。 > 仮に、tmpフォルダ以下全てを消去(ファイルorフォルダ)となると、 > rmdir for grep -d, glob "tmp/*"; > な記述を追記してやればよいのでしょうか? はい。でもフォルダが空っぽでないとrmdirは成功しないので、再帰するハメになります。 > どうにかしてtmpフォルダをいったん削除してから、 > tmpフォルダをまた作成する方が早いのでしょうか? 早いです。File::Pathというモジュールでtmpごとごっそり削除できます。 use File::Path; rmtree "tmp"; mkdir "tmp";

kal1119
質問者

お礼

> 早いです。File::Pathというモジュールでtmpごとごっそり削除できます。 > use File::Path; > rmtree "tmp"; > mkdir "tmp"; おぉ!完璧です。。。 どうもご丁寧にありがとうございました。 これから精進したいと思います。

その他の回答 (1)

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.1

unlink for grep -f, glob "tmp/*"; という感じで。

kal1119
質問者

補足

早速のご回答ありがとうございます。 上記記述でできました。 globでtmpフォルダ以下の一覧を取得し、 それがファイルなら削除する と言うような意味合いでしょうか(すみません初心者なもので・・・) 仮に、tmpフォルダ以下全てを消去(ファイルorフォルダ)となると、 rmdir for grep -d, glob "tmp/*"; な記述を追記してやればよいのでしょうか? それとも、どうにかしてtmpフォルダをいったん削除してから、 tmpフォルダをまた作成する方が早いのでしょうか? 以上、よろしくお願いいたします。