2009-06-26 18 views
13

Perlでは、サブディレクトリを作成すると同時に、親ディレクトリが存在しない場合は作成できますか? UNIXのmkdir -pコマンドと同様?1つのPerlコマンドでディレクトリと親ディレクトリを作成するにはどうすればよいですか?

+0

この質問を追加したので、毎回それを検索するのではなく、簡単にやり直すことができます。私はPOSIX.pmで何らかの理由でこれを常に探します。 – skiphoppy

答えて

22
use File::Path qw(make_path); 
make_path("path/to/sub/directory"); 

非推奨mkpath、好ましいmake_pathは5人のポーターはそれがhereをアーカイブのスレッドPerlでの議論から茎。

簡単に言えば、Perl 5.10のテストでは、makepath()インタフェースの引数解析で扱いにくかったです。したがって、関数のオプションを設定する最後の引数としてハッシュを取ったより単純なバージョンに置き換えられました。

+3

@skiphoppy:これは、質問に記載されているように、これはまだUNIXのmkdir -pコマンドのようなものではありません。 mkdirのmanページには -p, --parents no error if existing, make parent directories as neededが表示されますが、ディレクトリが存在する場合、make_pathはfalseを返します。 (make_path "/ tmp/foo"またはdie;#/ tmp/fooが存在すれば死ぬでしょう) – Randall

3

ファイルから使用mkpath ::パスモジュール:

use File::Path qw(mkpath); 
mkpath("path/to/sub/directory"); 
+1

これを今調べてみると、mkpath()は廃止され、公式のインターフェースはmake_path()になっています。誰かがそれを買うものについて大きな説明を書いたら、私はそれを受け入れられた答えにするでしょう。 – skiphoppy

3

親切に無視「彼らが存在しない場合は[原文のまま!]前make_path機能は非常にUnixコマンドのようなmkdir -p、与えられたディレクトリを作成します」 「MKDIR -p」機能が、次のコードでモジュールは動作します:

my $dir = '/root/example/dir'; 

system ("mkdir -p $dir 2> /dev/null") == 0 
    or die "failed to create $dir. exiting...\n"; 

あなたはモジュールを使用することができますが、その後、あなたが上のポートにあなたのコードを予定している各サーバーにインストールする必要があります。私は通常、mkdirのような作業のためにシステム関数を使う方が好きです。なぜなら、ディレクトリを作成するためにモジュールを一度しか必要としないときは、モジュールをインポートして呼び出すためのオーバーヘッドが少ないからです。

+0

モジュールのインストールを避けたいのであれば、このアプローチは意味があります。私は通常、必要なモジュールのインストールを要求するか、システムをサポートすることを拒否します。私はモジュールを使用してテストや研究の恩恵を受けることができるので、システムコールのチェックやエラーメッセージの出力の失敗などの間違いを避けることができます。プロセスを作成します。 – skiphoppy

+0

オペレーティングシステムへの依存関係はありませんか? –

関連する問題