文件测试主要用于查看如文件是否存在、文件大小、文件更新时间等信息。
文件测试操作符
-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;
-s 测试文件的大小,以字节计算文件大小。
例子:下面测试的是文件大小超过100字节,且更新日期低于两天的本文件夹下的文件。
#!/usr/bin/env perl#filename:test2.pl use 5.010; while(<>) { if(/\A-.*/){ my @line=split /\s+/,"$&"; # say "$line[8]"; say "$line[8]\tis bigger than 100bytes." if -s $line[8] > 100 and -M $line[8] > 2; } }运行命令:ls -l | ./<filename>
如何查看文件的大小(以M为单位):my size= (-s $filename)/1024;
注意一定要加括号。
其他的文件测试项
-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:索引节点修改时间(单位:天)
测试同一个文件的多项属性
if(-r $file and -w _) # 虚拟文件句柄_
{...}
栈式文件操作符
use 5.010;
if( -r -w -x -o -d $file){
print "My directory is readable,writable,and executable!\n";
}
时间: 2024-10-12 09:17:58