« 「○○○で始まらない文字列」を探す方法 | メイン | これは覚えておかねばっ! »

ファイルのコピー

ファイルのコピーをする場合は、File::Copyというモジュールを使うのが良い。

use File::Copy;
my $from = "/user_dir/hoge/fuga.txt";
my $to   = "/user_dir/fuga/hoge.txt";
copy($from, $to) or die "Can not copy `$from` to `$to`.";

ただし、コピーするためのフォルダ(ディレクトリ)が必要。
上の例の場合は、user_dirにfugaというディレクトリがないとコピーに失敗する。

Webで運用するようなCGIの場合は、あらかじめディレクトリを作成しておいて、バックアップや一時ファイルを作ったりするので機能的には十分ではある。
ただ、ローカルでファイル管理をしようとした時などは、これだとかなり面倒だ。
ディレクトリごとコピーする簡単な方法はないものか?
…という需要はあると思うのだが、なかなかうまい方法が見つけられない。
とりあえず、File::Pathというモジュールを使うとできるようだが、もっと簡単な方法もあるかもしれない。

use File::Copy;
use File::Path;
my $from = "/user_dir/hoge/fuga.txt";
my $to   = "/user_dir/fuga/hoge.txt";
(my $to_dir = $to) =~ s|([^/]*?)$||;
mkpath($to_dir);
copy($from, $to) or die "Can not copy `$from` to `$to`.";

mkpathは致命的なエラーを吐いて死ぬのでエラー処理は特にしなくてもOK。
あと、作ったディレクトリを知りたい場合は、

my @dir = mkpath($to_dir);

とすれば、@dirに作ったディレクトリのパスが入る。

とにかく、これでファイルの操作も簡単だ。

カテゴリ:

トラックバック

このエントリーのトラックバックURL:

この一覧は、次のエントリーを参照しています: ファイルのコピー:

» ファイルパスから正規表現で色々と取り出す方法 送信元 のぶろぐ
ファイルのコピーでも使ったけど、正規表現で何かを取り出したいときに使いやすいコード。 (my $to_dir = $to) =~ s|([... [詳しくはこちら]

» エラーの処理方法で暗中模索 送信元 のぶろぐ
ファイルのコピー で使ったような「die」による強制終了は、ローカルで実行する分... [詳しくはこちら]

同一カテゴリの最新記事

最近のエントリー

Amazon.co.jp

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.
Powered by
Movable Type 3.36
Amazon.co.jp