12.目錄操作(perl筆記)
可以用chdir運算子來改變當前的工作目錄
chdir "/etc/" or die "Cannot chdir to /etc: $!";
2,Glob
my @all_files = glob "*";
my @pm_files = glob "*.pm";
2,Glob的另外一種語法
使用“角括號語法”來呼叫此功能,看起來就跟讀取檔案控制程式碼差不多:
my @all_files = ; # 和my @all_files = glob "*"; 完全一樣
角括號之間的值會對雙引號內的字串來進行替換,這表示在進行glob操作之前,角括號內的perl便利會先輩展開成它們當前的值。
my $dir = "/etc";
my @dir_files = ;
此處,因為$dir會被展開當前的值,所以會取得指定目錄下任何含點號以及不含點號的檔案。
假如角括號既表示從檔案控制程式碼讀取又代表glob,那perl如何決定用哪一種運算子呢?檔案控制程式碼必須是perl識別符號。如果角括號內的專案滿足perl識別符號的條件,就是從檔案控制程式碼讀取;否則,它代表的是glob。例如:
my @files =
my @files =
3,目錄控制程式碼
若想從目錄裡取得檔名列表,還可以使用目錄控制程式碼。目錄控制程式碼看起來像檔案控制程式碼,使用起來也沒多大的差別。開啟(以opendir代替open ),讀取內容(以readdir代替readline),關閉(以closedir代替close).
my $dir_to_process = "/etc";
opendir DH, $dir_to_process or die "無法開啟 $dir_to_process:$!";
foreach $file (readdir DH) {
print "one file in $dir_to_process is $file
";
}
closedir DH;
4,移出檔案
unlink "slate","bedrock","lava";
unlink glob "*.o";
5,重新命名檔案
rename "old","new"
6,連線與檔案
硬連結
link "chicken", "egg" or warn "can't link chicken to egg:$!";
軟連結
symlink "dodgson", "carroll" or warn "can't symlink dodgson to carroll:$!";
要取得符號連結所指向的位置時,請使用readlink函式,它會返回符號連線所指向的位置,或在引數不時符號連線時返回undef;
my $where = readlink "carroll"; #得到"dodgson"
7,建立以及移出目錄
mkdir "fred", 0755 or warn "cannot makde fred directory:$!";
oct函式會強制把字串當成八進位制處理,無論它是否以0開頭
my ($name,$perm) = @ARGV;
mkdir $name, oct($perm) or die "cannot create $name:$!";
想要移出空目錄時,可以使用rmdir函式。
rmdir $_ for glob "fred/*" #移出fred/下所有的空目錄
foreach my $dir (qw(fred barney betty)) {
rmdir $dir or warn "cannot rmdir $dir:$!
";
}
如果目錄不為空,則rmdir運算子會執行失敗。你可以用unlink來刪除目錄的內容,再試著移出應該已經清空的目錄
my $temp_dir = "/tmp/scratch_$$"; #由程式識別符號決定。
mkdir $temp_dir,0700 or die "cannot create $temp_dir:$!";
unlink glob "$temp_dir/* $temp_dir/.*"; #刪除$temp_dir的內容
rmdir $temp_dir;
7,修改許可權
chmod 0755, "fred", "barney";
8,更改隸屬關係
chown會同時更改擁有者和所屬組,他們必須以數值形式的使用者識別符號已經組識別符號來指定:
my $user = 1004;
my $group = 100;
chown $user,$group, glob "*.o";
如果處理的不是數值,而是名稱,需要用getpwnam函式將名稱轉換成數值,再用相應的getgrnam將組名稱轉化成豎直就行了
defined (my $user = getpwnam "merlyn") or die "bad user ";
defined (my $group = getgrnam "users") or die "bad group ";
chown $user, $group, glob "/home/merlyn/*";
9,更改時間戳
如果你想修改某個檔案最近的更改或訪問時間以欺騙其他程式,可以使用utime函式來造假,它的前兩個引數是新的訪問時間和更改時間,後面接的事要修改的檔名列表,時間的格式採用的是內部的時間戳格式
"right now"是個很方便的時間戳值,time函式會以正確的格式返回這個值。所以,如果想修改當前目錄下所有的檔案,讓他們看起來是在一天前修改的,卻是在此刻被訪問的,只要這麼寫就可以了:
my $now = time;
my $ag0 = $now - 24 * 60 * 60; #一天的秒數
utime $now, $ag0, glob "*";
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245697/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- GO 筆記-目錄Go筆記
- Linux 學習筆記--目錄結構及檔案基本操作Linux筆記
- Spring學習筆記目錄Spring筆記
- 目錄操作
- 【筆記】DP最佳化技巧目錄筆記
- centerOs根目錄盤擴容筆記ROS筆記
- 筆記:Linux命令(目錄和檔案管理)筆記Linux
- 在 Linux 上操作目錄Linux
- Python 檔案、目錄操作Python
- 【HarmonyOS】BearPi-HM Nano學習筆記目錄NaN筆記
- Perl學習筆記(五)——關聯陣列筆記陣列
- 題目記錄
- 安卓學習筆記---開篇(目錄結構)安卓筆記
- Trace系列文章筆記目錄,陸續補充中...筆記
- 【PB案例學習筆記】-02 目錄瀏覽器筆記瀏覽器
- Laravel 原始碼筆記 框架目錄命名的含義Laravel原始碼筆記框架
- Laravel8學習筆記01 - 目錄結構Laravel筆記
- linux檔案系統的目錄結構筆記Linux筆記
- python3 筆記12.字串支援的函式Python筆記字串函式
- 記一次危險的操作——誤刪/usr/bin目錄
- Linux之旅第一篇-目錄結構及操作目錄Linux
- linux操作記錄Linux
- 程式碼目錄結構記錄
- Perl讀寫檔案&字串操作字串
- 搬磚日記目錄
- Linux中操作工作目錄和檔案目錄Linux
- Linux 目錄結構及詳細操作Linux
- 【linux0.12】目錄項管理與操作Linux
- linux常用操作記錄Linux
- mongodb聚合操作記錄MongoDB
- git checkout 對工作目錄的影響 —— Git 學習筆記 21Git筆記
- Weblogic安裝實施學習筆記(自總結帶目錄)Web筆記
- 史丹佛大學2014機器學習教程中文筆記目錄機器學習筆記
- 淘寶記錄筆記筆記
- [記錄]curl命令筆記筆記
- CentOS學習筆記 – 12. Nginx搭建Centos7.5遠端repoCentOS筆記Nginx
- python基本操作-檔案、目錄及路徑Python
- python 根據時間戳建立目錄操作Python時間戳
- 無緩衝檔案IO和目錄操作