- ベストアンサー
Perlで フォルダ内の全てのファイルを別のフォルダにコピーするには
お世話になります。 多分ご存知の方には簡単な話だと思いますが教えていただけませんか。 Aフォルダにあるhoge.txtをBフォルダにコピーしたければ use File::Copy; copy "./A/hoge.txt", "./B/hoge.txt" or die $!; で出来るのはわかっているのですが、Aフォルダにある全てのファイルをBフォルダにコピーするというのはどのようなコードを書いたらよいのでしょう。 ちなみにAフォルダには100以上ファイルがあります。ファイルは全部テキストファイルです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
$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 ... } こんな感じですかね
その他の回答 (4)
- menu_selec
- ベストアンサー率75% (3/4)
ヒントでは無理なようなので、具体的に・・・。 例では、./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; 以上。未チェックですが。
お礼
結局いろいろ自身でも勉強して、#1の方の回答を理解できました。 おかげさまで何とか目的を果たせました。 他にも沢山のご指導をいただけて感謝しています。 何か回答を追う毎に話が難しくなってきたようです。私の理解の範疇を超えてきました。早く皆様の域に達せられるように努力します。
- tatsu99
- ベストアンサー率52% (391/751)
ファイルの再帰的なコピーをする場合、unixで提供されている cp -R(又は-r)コマンドが使用できます。 これをsystem関数を使用して、呼び出してはいかがでしょうか。
- Tacosan
- ベストアンサー率23% (3656/15482)
や, 多分 #2 は use File::Copy::Recursive; して rcopy_glob 使えってことなんだろうけど... rcopy_glob("./A/*.txt", "./B"); みたいな感じで使えるんじゃないかなぁと思う. ちなみにそこで参照してる URL の内容がチンプンカンプンなのはしょうがないね. 誤訳が多すぎ. これなら英語を読んだ方がまだ意味がわかる... と書きたいところだけど英語も微妙にあやしい気がする.
File::Copy::Recursive でいいやん
補足
foreach my $file (@Files) { File::Copy::Recursive; } ですか? エラーは出ませんがファイルもコピーされません。 検索してこんなページ見つけたけど・・・あぁチンプンカンプン http://perldoc.jp/docs/modules/File-Copy-Recursive-0.06/Recursive.pod
補足
すみません。ほとんど素人なんで。。。その『copy ..』のところも明記してもらうとすごく助かるんですけど、お願いできませんでしょうか