file::copy模組提供了copy函式和cp函式來複製檔案,它們引數上完全一致,但行為上稍有區別。
用法大致如下:
use file::copy qw(copy cp);
copy("sourcefile","destinationfile") or die "copy failed: $!";
copy("copy.pm",\*stdout);
如果目標檔案不存在,但父目錄存在,則建立該目標檔案,但如果父目錄也不存在,則報錯
如果目標檔案存在,則覆蓋該目標檔案,不會給出任何提示
如果目標是乙個已存在的目錄,且源不是乙個檔案控制代碼,則拷貝到目標目錄中,如果源是乙個檔案控制代碼,將報錯
源和目標不能是同一檔案
因為是拷貝操作,所以可以跨檔案系統拷貝
第三個可選引數用於設定拷貝時的緩衝大小。對於檔案來說,一般緩衝大小是整個檔案(但最大2mb),對於不關聯實體檔案的檔案控制代碼(如套接字檔案控制代碼),預設為1k大小
cp可以替換copy。它們的引數模式完全一致,但cp會保留原始檔的屬性,而copy則是採用目標檔案的預設屬性。此外,cp在遇到許可權錯誤的時候返回0,而不管檔案是否成功拷貝
強烈建議:如果可以,都使用檔名而不是檔案控制代碼。如果要使用檔案控制代碼,則採用binmode模式的檔案控制代碼,以免丟失某些資料
file::copy模組無法操作目錄,所以copy無法複製目錄
例如,現在/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命令。
rename old_name,new_name;
rename old_name => new_name; # 列表環境下,逗號可用胖箭頭替換
但需要注意,rename函式無法跨檔案系統移動檔案,因為它的底層僅僅只是重新命名,修改檔案inode中的資料。跨檔案系統移動檔案,實際上是複製檔案再刪除原始檔,它會導致inode號碼改變,rename的本質是基於inode的,無法實現這樣的功能。
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互動的方式來取巧重新命名:
rename(old,new) or system("mv",old,new);
具體內容暫缺,可看官方手冊:file::copy::recursive perl目錄檔案操作 複製,移動,重新命名
perl目錄操作,建立目錄控制代碼指向要操作的目錄。開啟目錄控制代碼使用 opendir opendir dirhandle,directory 例 取某目錄下檔案的列表 opendir e,e 娛樂 music 阿杜 die can t open e files readdir e closedi...
linux 複製,移動,重新命名檔案或目錄
linux 檔案 目錄操作 檔案 目錄建立和刪除之前也寫過,鏈結 1.檔案 目錄複製 cp 選項 原始檔或目錄 目標檔案或目錄這個命令可以在複製的同時改變名字 eg,cp abc.log def.log 和 def.log 都是檔案 cp r test.quancheng quancheng 加 r...
API學習 刪除 複製 重新命名 移動檔案
刪除 複製 重新命名 移動檔案 標頭檔案 include include int main int argc,pchar argv 功能 應用程式主函式,根據輸入引數 刪除 複製 重新命名檔案 引數 刪除檔案 d 檔案路徑 將檔案路徑1的檔案複製到檔案路徑2 c 檔案路徑1 檔案路徑2 將檔案路徑1...