ファイルのコピー、移動
ファイルのコピーや移動はFile::Copyモジュールを使うとできます。コピーはFile::Copy::copy関数、移動はFile::Copy::move関数を使います。では、サンプルです。
#!/usr/bin/perl ############################################# # ファイルのコピー、移動のサンプル # Author: "Perl Programming Tips" ############################################# use File::Copy; # ファイル作成、書き込み open(HFILE1, ">file09_01_01.txt") or die($!); print(HFILE1 "aaa\n") or die($!); close(HFILE1); # ファイル名を指定してコピー print "copy:" . copy("file09_01_01.txt", "file09_01_02.txt") . "\n"; open(HFILE2, "<file09_01_02.txt") or die($!); open(HFILE4, ">file09_01_04.txt") or die($!); $rfile2 = \*HFILE2; $rfile4 = \*HFILE4; # ファイルハンドルを指定してコピー print "copy:" . copy($rfile2, $rfile4) . "\n"; close(HFILE2); close(HFILE4); # ファイルを指定のディレクトリに移動 mkdir("temp") or die($!) unless (-e "temp"); print "move:" . move("file09_01_01.txt", "temp") . "\n";
実行結果は次のようになります。
[g@630m temp]$ ll 合計 4 -rw-r--r-- 1 g g 835 2008-07-24 20:43 file09_01.pl [g@630m temp]$ perl file09_01.pl copy:1 copy:1 move:1 [g@630m temp]$ ll 合計 16 -rw-r--r-- 1 g g 835 2008-07-24 20:43 file09_01.pl -rw-rw-r-- 1 g g 4 2008-07-24 20:45 file09_01_02.txt -rw-rw-r-- 1 g g 4 2008-07-24 20:45 file09_01_04.txt drwxrwxr-x 2 g g 4096 2008-07-24 20:45 temp [g@630m temp]$ ll temp/ 合計 4 -rw-rw-r-- 1 g g 4 2008-07-24 20:45 file09_01_01.txt
はじめにコピー元のファイル「file09_01_01.txt」をopen関数で作成しています。copy関数にはコピー元のファイル、コピー先のファイルを指定します。ファイル名、ファイルハンドルへのリファレンス、ファイルハンドルグロブのいずれかで指定します。
上のサンプルでは、ファイル名を指定して「file09_01_01.txt」を「file09_01_02.txt」に、ファイルハンドルへのリファレンスを指定して「file09_01_02.txt」を「file09_01_04.txt」にコピーしています。
File::Copy::copy
ファイルをコピーする。
書式
copy source, dest, [buffsize]
引数
source:
コピー元ファイル(ファイル名、ファイルハンドルへのリファレンス、ファイルハンドルグロブのいずれか)
dest:
コピー先ファイル(ファイル名、ファイルハンドルへのリファレンス、ファイルハンドルグロブのいずれか)
buffsize:
コピー時に使われるバッファサイズ
戻り値
成功した場合は1。エラーの場合は0を返し$!をセットする。
move関数には移動元のファイル名、移動先のファイル名またはディレクトリ名を指定します。移動先にファイル名を指定した場合は、その名前にリネームされます。上のサンプルでは、ファイル「file09_01_01.txt」を「temp」ディレクトリに移動しています。
File::Copy::move
ファイルを移動する。
書式
move source, dest
引数
source:
移動元ファイル
dest:
移動先ファイルまたはディレクトリ
戻り値
成功した場合は1。エラーの場合は0を返し$!をセットする。
File::Copyモジュールには、デフォルトでエクスポートされるcopy、move関数の他に、明示的にエクスポートするcp、mv関数があります。cp、mv関数はそれぞれcopy、move関数と同義です。