Perl複製 移動 重新命名檔案 目錄

2021-09-08 22:59:22 字數 1977 閱讀 4727

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...