ディレクトリを再帰的にたどってファイルをコピーする
サブディレクトリがたくさんあるディレクトリ構造になっているディレクトリにあるPDFファイルを、一箇所のディレクトリに全部集めたいときに作ったPerlのスクリプト。DOSのコマンドでもできるかもしれないと思いつつ、Perlで書くほうが早そうだと思い手をつけたのですが、意外とかかってしまいました。。
use File::Find; use File::Copy; use FindBin; #-- ディレクトリを指定(複数の指定可能) --# @search_dir = ('./target/'); #-- スクリプトの場所からみた相対パスでコピー先を指定する $to_dir = $FindBin::Bin . '/all/'; if(!-d $to_dir){ print "to_dir not found"; exit; } #-- 実行 --# find(\&wanted, @search_dir); sub wanted{ if($_ =~ /\.pdf$/i){ print "$_\n"; copy($_ , $to_dir) or die "Copy failed: $!"; } }
wantedの中でファイルをコピーしようとしたのですが、カレントディレクトリは、作業中の(サブ)ディレクトリに変わってるのですね。