プロが教える店舗&オフィスのセキュリティ対策術

a.gifというファイルに、状態によってb.gifの内容をコピーしたり、c.gifの内容をコピーしたりしたいのですが、リファレンス本などをみるとそのようなコマンドはないようでした。
このようなことは実現できるでしょうか?
なにか良い方法をご存知の方、ぜひ教えてください。

A 回答 (1件)

TSkasiwaさま、はじめまして。



>a.gifというファイルに、状態によってb.gifの内容をコピーしたり、
>c.gifの内容>をコピーしたりしたいのですが、リファレンス本などを
>みるとそのようなコマンド>はないようでした。
>このようなことは実現できるでしょうか?

ご質問の件ですが、ファイルをコピーする場合は、File::Copy を使うのが最も良いと思います。

#######################################################
use File::Copy 'copy';

copy ("ABC.gif", "DEF.gif");
# ABC.gif を DEF.gifへとコピーする
#######################################################

このように、Perlでは、MS-DOSのコピーコマンドに近い感覚で、
ファイルをコピーすることが出来ます。


又、現在のディレクトリ(を含めた下の階層)の一覧は、File::Find関数を
以下のように使用することで得ることができます。

#######################################################
use File::Find 'find';

find (\&wanted, "./");

sub wanted {
print "$File::Find::name\n";
# 現在のディレクトリ以下[サブディレクトリ含む]の全てのファイルを表示する
}
#######################################################

File::Find(\&wanted, dir1, [dir2 ...]) 関数

の詳細な使い方につきましては、
ネットや書籍などで、お調べになってみてください。
いろいろな便利なオプションがございます。

又、perlの一般的な関数である、readdir関数を使用しても
ほぼ同様の効果が得られますので、こちらも良いと思います。


最後に、簡単な正規表現や判定文などを加えると次のようなサンプルができます。

#######################################################
use File::Copy 'copy';
use File::Find 'find';

find (\&wanted, "./");

sub wanted {
if (/.+\.gif$/) {
$File::Find::name =~ s|^./||;
copy ($File::Find::name, "E:\\$File::Find::name");
# 現在のディレクトリの *.gif ファイルをE:\フォルダにコピーする
}
}
#######################################################

いかがでしょうか? ご参考になれば。
何か、ご不明な点などありましたら、ご遠慮なく補足してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
これがやりたかったのです。
File::Find(\&wanted, dir1, [dir2 ...]) 関数 を調べてこれからどんな風につかえるか、というのを勉強しようと思います。
本当にありがとうございました。

お礼日時:2001/10/16 15:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!