- ベストアンサー
フォルダ以下にファイルがあるか否か
フォルダ(tmp)下にファイルが一つでも存在すれば、 フォルダ以下全てのファイルを削除、 ファイルがなければスルー、 というようなプログラムを作りたいのですが可能でしょうか? Perlバージョンは5.6.1です。 以上、よろしくお願いいたします。
- みんなの回答 (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";
その他の回答 (1)
- Hasty
- ベストアンサー率73% (19/26)
unlink for grep -f, glob "tmp/*"; という感じで。
補足
早速のご回答ありがとうございます。 上記記述でできました。 globでtmpフォルダ以下の一覧を取得し、 それがファイルなら削除する と言うような意味合いでしょうか(すみません初心者なもので・・・) 仮に、tmpフォルダ以下全てを消去(ファイルorフォルダ)となると、 rmdir for grep -d, glob "tmp/*"; な記述を追記してやればよいのでしょうか? それとも、どうにかしてtmpフォルダをいったん削除してから、 tmpフォルダをまた作成する方が早いのでしょうか? 以上、よろしくお願いいたします。
お礼
> 早いです。File::Pathというモジュールでtmpごとごっそり削除できます。 > use File::Path; > rmtree "tmp"; > mkdir "tmp"; おぉ!完璧です。。。 どうもご丁寧にありがとうございました。 これから精進したいと思います。