File-NCopy-0.34 > File::NCopy

名前

File::NCopy - Copy file, file Copy file[s] | dir[s], dir

概要

    use File::NCopy qw(copy);

    copy "file","other_file";
    copy "file1","file2","file3","directory";

    # ディレクトリを再帰的にコピーしたい
    copy \1,"directory1","directory2";
    copy \1,"file1","file2","directory1","file3","directory2","file4",
        "directory";

    # ファイルハンドルへのリファレンスを使うことも出来ます。これは
    # File::Copyとの後方互換性のためです
    copy \*FILE1,\*FILE2;
    copy \*FILE1,"file";
    copy "file1",\*FILE2;


    # ディレクトリを再帰的にコピーしたくないので
    # 最初の引数として\1を指定しません。
    copy "*.c","*.pl","programs";
    copy "*", "backup";

    use File::NCopy;

    # デフォルトの設定値は以下の通りです
    $file = File::NCopy->new(
            'recursive'      => 0,
            'preserve'       => 0,
            'follow_links'   => 0,
            'force_write'   => 0,
            'set_permission' => \&File::NCopy::u_chmod,
            'file_check'     => \&File::NCopy::f_check,
            'set_times'      => \&File::NCopy::s_times,
    );

    set_permissionは2つのファイル名を取ります。ファイルの権限設定を取得するための
    元のファイルと、ファイルの権限を設定する新しいファイルです。

    file_checkは2つのパラメータをとります。コピーする元のファイルと
    コピー先のファイルをチェックするためのファイル名です。私は
    Unixシステムのためにflockを使っています。
    これのデフォルトは\&File::NCopy::f_checkです。
    Unixでは\&File::NCopy::unix_checkを使うこともできます。
    これはiノードとデバイス番号を比較します。

    set_times はpreserve属性がtrueであると使われます。これはファイルの
    アクセス時刻、更新時刻を留め、元ファイルの所有者をの所有者にしよう
    ともします。全ての人がアクセス時刻、更新時刻を保持することできますが、
    これはrootにより使われるスクリプトでは便利でしょう。これは2つの引数を
    取ることができます。statを取得する元のファイルとそのstatを適用する
    先のファイルです。

    Unixマシンでは心配する必要はありません。他のシステムでは独自の
    subリファレンスを与えたいと思うかもしれません。

    $file = File::NCopy->new(recursive => 1);
    $file->copy "file","other_file";
    $file->copy "directory1","directory2";

    $file = File::NCopy->new(u_chmod => \&my_chmod,f_check => \&my_fcheck);
    $file->copy "directory1","directory2";

説明

File::NCopy::copyは複数のファイルをディレクトリに、あるいは1つの ファイルを別のファイルにコピーします。ファイルへコピーしたいときには、 ファイル・ハンドルへのリファレンスを使うこともできます。機能は cpに非常に似ています。引数がディレクトリからディレクトリへのコピーで recursiveフラグが設定されているときには、cp -Rのように再帰的に行われます。 実際、ほとんどの部分でのUnixでのcpのように振舞います。 配列コンテキストで呼ばれると、成功したコピーの配列が返されます。 そうでなければ成功したコピーの数を返します。ファイル・ハンドルが渡されると、 writeモードでファイルをオープンすることによりpoochされるために、 私たちがコピーしているファイルが、コピーしようとしている先と同じであるかを 確認することは困難です。これを避けるため、特に出力先のファイルにには、 可能である場合のすべてで、ファイル名を代わりに使うことができます。 ファイル・ハンドルが渡されると、copyが戻ってきたとき、それはクローズされて いません。copyによりオープンされたファイルはクローズされます。

copy

ファイルを他のファイルに、あるいはファイルをディレクトリに、あるいは複数の ファイルとディレクトリを他のディレクトリにコピーします。あるいはディレクトリを 他のディレクトリに。拡張されない最後の引数を除いて、ワイルドカード引数は 展開されます。ファイルとディレクトリの権限は元のファイルの権限に設定され、 もしpreserveが設定されていると、これは白い帽子(=White hat)をかぶっている人にだけかも しれませんが、uidとgidも設定しようとします。 リスト・コンテキストでは、正常にコピーされたファイル/ディレクトリの名前の 全てを返します。スカラー・コンテキストでは正常にコピーが行われた数を 返します。もし全てをコピーすることをうまくいけば、ディレクトリ引数は 1回の正常なコピーと考えられます。ディレクトリからディレクトリへの コピーをおこなうためには、recursiveフラグが設定されていなければいけません。

cp

copyを呼び出すだけです。File::Copyと互換性のためにあります。

new

これを利用すると、いくつかの設定機能をもったオブジェクト指向のモジュール として扱うことができます。

recursive

オブジェクトとして使われると、recursive属性を設定するためにこれを利用する ことができます。newで生成するときに設定することもできます。他の属性は全て オブジェクトを生成するときに設定されなければいけません。これが指定 されなければ、下のディレクトリは追いかけられません。

preserve

ユーザとグループIDと同様に最終更新時刻とアクセス時刻を保持しようとします。 アクセス時刻と更新時刻は常に保持されるでしょうが、uidとgidはそうでなない ですから、これはシステム管理者には便利な機能です。

follow_links

そのリンクがディレクトリへのものであり、この属性がtrueであると、 ディレクトリは追求され、再帰的にコピーされます。そうでないと リンクはリンクが示す最も元になるディレクトリに向けられます。 例えば。

/sys/ が/usr/src/i386/sysにリンクしている/usr/src/sys/にリンクしていると、 /sys/は実際に/usr/src/sys/ではなく/usr/src/i386/sys/に リンクされます。 というのも、元々リンクしたいディレクトリがまだ残っているのに /usr/src/sys/というリンクが削除されたときには、リンクを 失ってしまうからです。

force_write

権限が読込のみになっていたとしても、ファイルを強制的に書き込みます。

使用例

概要をご覧ください

バグ

リンクに従うと、出力先のディレクトリは厳密に元のディレクトリと 同じではないかもしれません。その理由は循環していたり、死んでいるリンクに 従わないことを確認する必要があるということです。 結果は本当に元のディレクトリに似ていないかもしれませんし、 まさに本物に機能です。全ての内容が同じです。:)

From Ken Healy (Version 0.34)

Win32では、パスのためにバックスラッシュを利用することが必要です。

作者(=AUTHOR)

Gabor Egressy gabor@vmunix.com

Copyright (c) 1998 Gabor Egressy. All rights reserved. All wrongs reversed. This program is free software; you can redistribute and/or modify it under the same terms as Perl itself.

Some ideas gleaned from File::Copy by Aaron Sherman & Charles Bailey, but the code was written from scratch.

Patch at versions 0.33, and 0.34 added by MZSANFORD.

翻訳者

川合 孝典(GCD00051@nifty.ne.jp)