File::Copy模塊提供了copy函數和cp函數來複制文件,它們參數上徹底一致,但行爲上稍有區別。node
用法大體以下:shell
use File::Copy qw(copy cp); copy("sourcefile","destinationfile") or die "Copy failed: $!"; copy("Copy.pm",\*STDOUT);
例如,如今/mnt/g下建立一個文件t1.py。而後執行以下內容的perl程序:它將拷貝root下的t.py,而後再拷貝覆蓋到已存在的t1.py。函數
use File::Copy qw(copy cp); copy "/root/t.py","/mnt/g/" or die "Can't copy file1: $!"; cp qw(/mnt/g/t.py /mnt/g/t1.py) or die "Can't copy file2: $!";
rename函數能夠重命名文件,也能夠移動文件到其它目錄。功能相似於unix下的mv命令。unix
rename old_name,new_name; rename old_name => new_name; # 列表環境下,逗號可用胖箭頭替換
但須要注意,rename函數沒法跨文件系統移動文件,由於它的底層僅僅只是重命名,修改文件inode中的數據。跨文件系統移動文件,其實是複製文件再刪除源文件,它會致使inode號碼改變,rename的本質是基於inode的,沒法實現這樣的功能。code
rename "test2.log","test222.log" or die "Can't rename file1: $!"; rename "test222.log","/tmp/test223.log" or die "Can't rename file2: $!"; rename "/tmp/test223.log","/boot/test223.log" # 本行將報錯 or die "Can't rename file3: $!";
File::Copy模塊提供了move函數,它能夠跨文件系統移動文件。用法大體以下:遞歸
use File::Copy qw(move mv); move("/dev1/sourcefile","/dev2/destinationfile"); mv("/dev1/sourcefile","/dev2/destinationfile"); mv("/dev1/sourcefile" => "/dev2/destinationfile");
其實,能夠採用shell交互的方式來取巧重命名:get
rename(old,new) or system("mv",old,new);
具體內容暫缺,可看官方手冊:File::Copy::Recursiveio