していてふと思ったのだけど、rmdir関数だとディレクトリの中身が
空じゃないと削除してくれないんですね。
そんなわけで、削除したいディレクトリにファイルがある場合は
ディレクトリ内を削除してからフォルダを削除しないといけない
わけですが、非常にめんどい。
てか、車輪が標準装備されてるんだから使いましょう。
って話。
という流れで登場するのが、File::Pathモジュール。
やってくれることは、階層を持ったディレクトリの作成や
rm -rfコマンドのごとく指定したディレクトリにファイルが
あってもモジュール側で削除してくれます。
で、CPANに飛んでいきまずは、SYNOPSISをコピペで動かしみよう~
→File::Path(Ver 2.04)
と、思ったらうまくいかないのですよ…
で、よくよく見たらmodernとtraditionalに別れてるわけで
自分のPCや、レンタル鯖のFile::Pathのバージョンを調べてみると
Ver1.08なわけです。
で、ひょっとしてってことで
perldoc -m File::Path
で、Ver1.08のPODを眺めてみるとサポートしてるのは、
Ver2.04で書いてあったtraditionalの方の書き方だったので
ひとまず、そちらで書いたら動いてくれました。
という前置きをしてから。
カレントディレクトリに./a/b/cと言ったディレクトリを作りたければ
use strict;
use warnings;
use File::Path;
#modern
mkpath( './a/b/c', {verbose => 0, mode => 0755} );
#traditional
mkpath( ['./a/b/c'], 0, 0755)
(※modernをサポートしてるかは、各自確認してみてください。)
引数についてですが、
2番目の引数をtrueになるように何か与えると
生成したフォルダの情報を吐き出します。
↓こんな感じ
mkdir ./a
mkdir ./a/b
mkdir ./a/b/c
勿論、既にフォルダが存在していた場合は何もしません。
3番目の引数は、パーミッションの設定です。
何もセットしない場合は、ディフォルトで0777がセットされるようです。
削除に関しても同じです。
カレントディレクトリに./a/b/cという構成のディレクトリがあったとして…
use strict;
use warnings;
use File::Path;
#modern
rmtree( './a' );
#traditional
rmtree( ['./a'] )
これで、削除ができますね。
おまけ。
winで、ppmから最新のFile::Pathを探してみたのだけど
最新を含んだリポジトリが見当たらなかったんで、
perl -MCPAN -e shell で
install File::Path で
さっくり入ってくれました。
ver2.04だと他にも引数が用意されていますね。
0 件のコメント:
コメントを投稿