Perl操做文件less
-e 判斷文件是否存在socket
die 「Oops! A file called‘$filename’already exists.\n」; if –e $filename;函數
-M 查看文件多久沒有修改測試
warn 「Config file is looking pretty old!\n」; if –M CONFIG > 28; (文件在過去的28天都沒修改過)ui
example:spa
找到大於100K,而且在90天內未被訪問過的文件索引
my@ariginal_files = qw/ fred barney betty Wilma pebbles dino bam-bamm/;
my @big_old_files; #要移到備份磁帶上的文件
foreach my $filename (@original_files){
push @big_old_files, $filename
if –s $filename > 100_100 and –A $filename > 90;
}ip
檢測選項含義
-r 文件或目錄對此(有效的)用戶(effective user)或組是可讀的
-w 文件或目錄對此(有效的)用戶或組是可寫的
-x 文件或目錄對此(有效的)用戶或組是可執行的
-o 文件或目錄由本(有效的)用戶全部
-R 文件或目錄對此用戶(real user)或組是可讀的
-W 文件或目錄對此用戶或組是可寫的
-X 文件或目錄對此用戶或組是可執行的
-O 文件或目錄由本用戶全部
-e 文件或目錄名存在
-z 文件存在,大小爲0(目錄恆爲false)
-s 文件或目錄存在,大小大於0(值爲文件的大小,單位:字節)
-f 爲普通文本
-d 爲目錄
-l 爲符號連接
-S 爲socket
-p 爲管道(Entry is a named pipe(a「fifo」))
-b 爲block-special 文件(如掛載磁盤)
-c 爲character-special 文件(如I/O 設備)
-u setuid 的文件或目錄
-g setgid 的文件或目錄
-k File or directory has the sticky bit set
-t 文件句柄爲TTY(系統函數isatty()的返回結果;不能對文件名使用這個測試)
-T 文件有些像「文本」文件
-B 文件有些像「二進制」文件
-M 修改的時間(單位:天)
-A 訪問的時間(單位:天)
-C 索引節點修改時間(單位:天)ci
目錄操做:it
chdir 改變工做目錄
chdir 「/etc」or die 「cannot chdir to /etc: $!」;
glob 文件名匹配
my @pm_files = glob 「*.pm」 匹配全部.pm文件
unlink 刪除文件 (返回值爲成功刪除的文件個數)
unlink 「slate」, 「bedrock」, 「lava」;
unlink glob 「*.o」; 刪除全部.o文件
rename 重命名 (相似於mv)
rename 「old」, 「new」;
link 硬鏈接
symlink 軟鏈接
mkdir 建立目錄
mkdir 「fred」, 0755 or warn 「Cannot make fred directory: $!」;
my ($name, $perm) = @ARGV; #前面兩個參數是名字和權限
mkdir $name, oct($perm) or die 「cannot create $name: $!」; #oct將參數強制轉爲8進制,無論前面有沒有0
目錄句柄
從給定目錄獲得其文件名列表的方法還能夠使用目錄句柄(directory handle)。目錄句柄外形及其行爲都很像文件句柄。打
開(使用opendir 而非open),從中讀入(使用readdir 而非readline),關閉(使用closedir 而非close)。不是讀入文件的內
容,而是將一個目錄中的文件名(以及一些其它東西)讀入,如:
my $dir_to_process = 「/etc」
opendir DH, $dir_to_process or die 「Cannot open $dir_to_process: $!」;
foreach $file(readdir DH) {
print 「one file in $dir_to_process is $file\n」;
}
closedir DH;
readdir用在while中
while ($name = readdir DIR) {next unless $name =~ /\.pm$/;… more processing…}