カレントディレクトリにfoo/bar/bazなディレクトリ階層を作成したい時
下記構成
├── foo
│ └── bar
│ └── baz
#!/usr/bin/perl use strict; use warnings; use utf8; mkdir foo mkdir foo/bar mkdir foo/bar/bazのように上位ディレクトリから順に作成していくことになる。
File::Pathを使うと1行ですむ。
#!/usr/bin/perl use strict; use warnings; use utf8; use File::Path qw/make_path/; make_path('foo/bar/baz'); #ver 2.06以降
■ディレクトリの削除
下記ディレクトリ構造でfooディレクトリを削除したい時
├── foo
│ ├── bar
│ │ ├── baz
│ │ │ └── sample.txt
│ │ └── sample.txt
│ └── sample.txt
最下層のディレクトリ内のファイルを削除⇒ディレクトリ削除の順で削除する必要がある。
File::Findeモジュールのfinddepth関数で最下層のディレクトリからアクセスして削除していく
#!/usr/bin/perl use strict; use warnings; use utf8; use File::Find; use FindBin; finddepth(\&deleteAll, 'foo'); sub deleteAll{ #フルパスじゃないと削除できなかったのでスクリプトのパスを取得しておく my $BasePath = $FindBin::Bin . '/'; if(-f $_){ unlink $BasePath . $File::Find::name || die $! }; if(-d $_){ rmdir $BasePath . $File::Find::name || die $! }; }
File::Pathを使うと1行ですむ。
#!/usr/bin/perl use strict; use warnings; use utf8; use File::Path qw/remove_tree/; remove_tree('foo'); #ver 2.06以降
v2.00より前とv2.06より前とそれ以降でインターフェースが異なります。
perl -MFile::Path -le 'print "$File::Path::VERSION"'
等で、確認した上で利用する必要があります。
v2.06以降の場合
use File::Path qw(make_path remove_tree); make_path('foo/bar/baz', '/zug/zwang'); #複数作成したい場合コンマで区切る make_path('foo/bar/baz', '/zug/zwang', { verbose => 1, #1を指定すると実行時コマンドを出力する mode => 0711, #アクセス権限を指定 デフォ:0777 }); remove_tree('foo/bar/baz', '/zug/zwang'); remove_tree('foo/bar/baz', '/zug/zwang', { verbose => 1, error => \my $err_list, #エラー情報 });
0 件のコメント:
コメントを投稿