perlでmkdir -pする
File::Path というモジュールに入っている、mkpath というのを使います。
#!/usr/bin/perl
use File::Path;
use strict;
my @hoge = mkpath ('/home/noriko/test/perl/hoge/moge/a/a/a/');
foreach(@hoge){
print $_ . "\n";
}
mkpath は、作成したディレクトリを配列にして返します。
これを実行すると
noriko@caelum:~/test/perl$ perl mkpass.pl /home/noriko/test/perl/hoge /home/noriko/test/perl/hoge/moge /home/noriko/test/perl/hoge/moge/a /home/noriko/test/perl/hoge/moge/a/a /home/noriko/test/perl/hoge/moge/a/a/a/
ディレクトリがなければ作成してくれます。
同じスクリプトをもう一度実行すると、すでにディレクトリがあるので、何も返ってきません。
パーミッションないところとかに作ろうとすると、エラーになります。
mkdir /var/log/hoge: 許可がありません at mkpass.pl line 5
エラーをフックしたい場合は、eval を使いましょう。
#!/usr/bin/perl
use File::Path;
use strict;
my @hoge;
eval{
@hoge = mkpath ('/home/noriko/perl/hoge/moge/moge');
};
if($@){
print "error: " . $@;
}
foreach(@hoge){
print $_ . "\n";
}
こんな感じにしてみます。/home/noriko/perl/hoge/moge のパーミッションは、
noriko@caelum:~/test/perl/hoge$ ls -lart 合計 16 drwxr-xr-x 2 root root 4096 2009-10-17 23:38 moge
755 で、オーナーが root ですので、root でない人は書き込みできません。スクリプトを実行すると、
noriko@caelum:~/test/perl$ perl mkdir.pl error: mkdir /home/noriko/perl/hoge/moge/moge: 許可がありません at mkdir.pl line 8
のように表示されます。