Perlで、サブディレクトリを作成し、同時に、存在しない場合は親ディレクトリを作成するにはどうすればよいですか?UNIXのmkdir-pコマンドのように?
5 に答える
use File::Path qw(make_path);
make_path("path/to/sub/directory");
非推奨のmkpathと優先されるmake_pathは、ここにアーカイブされているPerl5Portersスレッドでの議論に端を発しています。
一言で言えば、Perl 5.10のテストでは、makepath()インターフェースの引数の解析が厄介であることが判明しました。そのため、関数のオプションを設定するための最後の引数としてハッシュを使用する、より単純なバージョンに置き換えられました。
File::Pathモジュールからmkpathを使用します。
use File::Path qw(mkpath);
mkpath("path/to/sub/directory");
'mkdir -p'機能を備えたPerlモジュールを探している場合は無視してください。ただし、次のコードは機能します。
my $dir = '/root/example/dir';
system ("mkdir -p $dir 2> /dev/null") == 0
or die "failed to create $dir. exiting...\n";
モジュールを使用することはできますが、コードを移植する各サーバーにモジュールをインストールする必要があります。私は通常、mkdirのような作業にシステム関数を使用することを好みます。これは、ディレクトリを作成するために1回だけ必要な場合に、モジュールをインポートして呼び出すオーバーヘッドが少ないためです。
ref http://perldoc.perl.org/File/Path.html
「make_path関数は、Unixコマンドのように、以前に[sic!]存在していなかった場合に、指定されたディレクトリを作成します。mkdir -p
」
mkdir()を使用すると、Perlスクリプトにディレクトリを作成できます。
例:
use strict;
use warnings;
my $directory = "tmp";
unless(mkdir($directory, 0755)) {
die "Unable to create $directory\n";
このプログラムは、権限が0755に設定された「tmp」というディレクトリを作成します(所有者のみがディレクトリへの書き込み権限を持ちます。グループメンバーおよびその他のメンバーは、ファイルの表示とディレクトリの内容の一覧表示のみが可能です)。