• ベストアンサー

Perlで フォルダ内の全てのファイルを別のフォルダにコピーするには

お世話になります。 多分ご存知の方には簡単な話だと思いますが教えていただけませんか。 Aフォルダにあるhoge.txtをBフォルダにコピーしたければ use File::Copy; copy "./A/hoge.txt", "./B/hoge.txt" or die $!; で出来るのはわかっているのですが、Aフォルダにある全てのファイルをBフォルダにコピーするというのはどのようなコードを書いたらよいのでしょう。 ちなみにAフォルダには100以上ファイルがあります。ファイルは全部テキストファイルです。

質問者が選んだベストアンサー

  • ベストアンサー
  • agharta
  • ベストアンサー率52% (54/103)
回答No.1

$src_dir = "./a"; $dst_dir = "./b"; opendir(DIR, "$src_dir"); my @Files = grep { -f "$src_dir/$_" && /\.txt/ } readdir(DIR); closedir DIR; foreach my $file (@Files) { copy ... } こんな感じですかね

souta_n
質問者

補足

すみません。ほとんど素人なんで。。。その『copy ..』のところも明記してもらうとすごく助かるんですけど、お願いできませんでしょうか

その他の回答 (4)

回答No.5

ヒントでは無理なようなので、具体的に・・・。 例では、./log/A/○○.txt のようなパスの場合の記述です。 my $dir = '/log'; # 対象ディレクトリ名(相対パスでもOKです) opendir DH, $dir or die "$dir:$!"; while (my $file = readdir DH) { use File::Copy; copy "./A/$file, "./B/$file" or die $!; } closedir DH; 以上。未チェックですが。

souta_n
質問者

お礼

結局いろいろ自身でも勉強して、#1の方の回答を理解できました。 おかげさまで何とか目的を果たせました。 他にも沢山のご指導をいただけて感謝しています。 何か回答を追う毎に話が難しくなってきたようです。私の理解の範疇を超えてきました。早く皆様の域に達せられるように努力します。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

ファイルの再帰的なコピーをする場合、unixで提供されている cp -R(又は-r)コマンドが使用できます。 これをsystem関数を使用して、呼び出してはいかがでしょうか。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

や, 多分 #2 は use File::Copy::Recursive; して rcopy_glob 使えってことなんだろうけど... rcopy_glob("./A/*.txt", "./B"); みたいな感じで使えるんじゃないかなぁと思う. ちなみにそこで参照してる URL の内容がチンプンカンプンなのはしょうがないね. 誤訳が多すぎ. これなら英語を読んだ方がまだ意味がわかる... と書きたいところだけど英語も微妙にあやしい気がする.

noname#208124
noname#208124
回答No.2

File::Copy::Recursive でいいやん

souta_n
質問者

補足

foreach my $file (@Files) { File::Copy::Recursive; } ですか? エラーは出ませんがファイルもコピーされません。 検索してこんなページ見つけたけど・・・あぁチンプンカンプン http://perldoc.jp/docs/modules/File-Copy-Recursive-0.06/Recursive.pod

関連するQ&A