Perl语言入门笔记 第十二章 文件测试
=pod 第十二章 文件测试 文件测试操作符: -e:判断文件是否存在 在创建新文件程序之前,应先检查指定的文件是否已经存在,以免意外覆盖重要的电子表格或是宝贵的生日档案。要达到此目的,我们可以用-e文件测试操作符来测试文件是否存在: 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; CONFIG:为文件句柄,来检查CONFIG 28内是否改变过 -s:查找硬盘中的文件的大小 my @original_files = qw /fred barney betty wilma pebbles dino bamm-bamm /; my @big_old_files; #将要移到备份磁带上的既大且旧的文件列表 foreach my $filename (@original_files) { push @big_old_files, $filename if -s $filename > 100_000 and -A $filename > 90; } 文件测试操作符 意义 -r 文件或目录,对目前(有效的)用户或组来说是可读的 -w 文件或目录,对目前(有效的)用户或组来说是可写的 -x 文件或目录,对目前(有效的)用户或组来说是可执行的 -o 文件或目录,由目前(有效的)用户拥有 -R 文件或目录,对实际的用户或组来说是可读的 -W 文件或目录,对实际的用户或组来说是可写的 -X 文件或目录,对实际的用户或组来说是可执行的 -O 文件或目录,由实际的用户拥有 -e 文件或目录是存在的 -z 文件存在且没有美容(对目录来说永远为假) -s 文件或目录存在而且有内容(返回值是以字节为单位的文件的大小) -f 是普通文件 -d 是目录 -l 是符号链接 -S 是socket类型的文件 -p 是命名管道,也就是先入先出队列 -b 是块设备(比如默哥可挂载的磁盘) -c 是字符设备文件(比如某个IO设备) -u 文件或目录设置了setuid位 -g 文件或目录设置了setgid位 -k 文件或目录设置了sticky位 -t 文件句柄是tty设备,(类似系统函数isatty()的测试,不能对文件名进行此测试) -T 看起来像文本文件 -B 看起来像二进制文件 -M 最后一次被修改后至今的天数 -A 最后一次被访问后至今的天数 -C 最后一次文件节点编号(inode)被变更后至今的天数 上面的所谓的有效用户,指的是"负责"运行这个程序的人 my $size_in_k = (-s) / 1024; #获取文件是kb大小 测试同一文件的多项属性: 可读又可写 if(-r $file and -w $file) { ... } 虚拟文件句柄_(下划线) if(-r $file and -w _) { ... } if(-r $file) { print "The file is readable\n"; } if(-w _) { print "The file is wirtable\n"; } 栈式文件测试操作符: if(-w -r $file) { print "The file is both readable and writeable!\n"; } use 5.010; if(-r -w -x -o -d $file) { print "My directory is readable, writeable, and executable!\n"; } if(-d $file and -s _ < 512) { print "The directory is less than 512 bytes!\n" } stat和lstat函数: my($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blockzies, $blocks) = stat($fileName); $dev, $ino 即文件所在的设备与文件的inode编号,这个编号决定了这个文件的唯一性,会想发给文件的编号,即使他有多个不同的文件名(使用应链接!\n) $mode: 文件的权限集合 $nlink: 文件或目录的硬链接数,也就是这个条目有多少个真实名称 $uid和$gid 以数值形式表示文件拥有者的用户ID及组ID $size: 以字节为单位文件大小,和-s文件操作符的返回值相同 $atime,$mtime,$ctime: 三种时间戳,但在这里是以系统的时间格式来表示 localtime函数: my $timestamp = 118060098; my $date = localtime $timestamp; 在列表上下文中,localtime会返回一个数字元素组成的列表,但其中有些元素不是你想要的: my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $yday, $listdst) = localtime $timestamp; 使用字符串: =cut
简单测试:
#!/usr/bin/perl -w use strict; my $filename = "./file1"; die "Oops ! A file called $filename already exists.\n" if -e $filename;
不负自己