Perlをツール的に使っていて、コードの中で複数の階層にあるファイルをディレクトリごと再帰的にコピーしたくなった。
以前、ファイルのコピーについて何か書いた気がして調べてみたのだが、大したことが書いていなかった…。

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

[ファイルのコピー@のぶろぐ]

ということで、他の方法を調べてみたところ、「File::Copy::Recursive」を使うのがよさそうだ、というところに行き着いた。
標準モジュールではないのでcpanからインストールする必要があったが、特に問題はなくスムーズにインストールできた。
現在のディレクトリ以下のファイルを、絶対パスの「/temp」へコピーする場合は、以下のようにする。

1
2
3
4
5
6
use strict;
use warnings;
use File::Copy::Recursive qw(rcopy);
my $from_dir = ".";
my $to_dir = "/temp";
rcopy($from_dir, $to_dir);

参考:
Daniel Muey / File-Copy-Recursive - search.cpan.org


ちなみに、「Path::Class」のオブジェクトも引数で渡すことができるようだ。
ナイス連係プレー。

1
2
3
4
5
6
7
use warnings;
use strict;
use File::Copy::Recursive qw(rcopy);
use Path::Class;
my $from_dir = dir(".");
my $to_dir = dir("", "temp");
rcopy($from_dir, $to_dir);