文件测试
1. 文件测试操作符
perl提供了一组用于测试文件的操作符,借此可以返回特定的文件信息。
- 通常使用 -x的形式调用,其中x值得时特定的测试操作,如-w -r等。
- 通过特定的文件测试符,可以让我们的程序变得更加智能。
- 使用格式: -r $filename (连字符+测试场景 文件名称或文件句柄)
- 默认检查$_,但是-t 的默认值是STDIN
#!/usr/bin/perl
#使用-e判断文件是否存在
#如果文件存在,调用die函数结束程序,这样可以保证已存在的文件不会被覆盖
die "Oops! A file call '$filename' already exists.\n"
if -e $filename;
#测试某个文件是否保持更新
#这里的-M返回的是文件最后一次修改时间到让当前程序启动时刻之间的天数
warn "Config file is looking pretty old.\n"
if -M CONFIG > 20;
#如果我们希望查找文件大于100k,并且超过90天未访问的文件
my @original_files = qw/fred betty barney wilma pebbles dino/;
my @big_old_files;
foreach my $filename (@original_files) {
push @big_old_files,$filename
if -s $filename > 100_000 and -A $filename > 90; # -s 返回的是以字节计算的文件大小
}
表1.1 文件测试操作符及其意义
文件测试符 | 意义 |
---|---|
-r | 文件或目录,对目前(有效的)用户或组来说是可读的 |
-w | 文件或目录,对目前(有效的)用户或组来说是可写的 |
-x | 文件或目录,对目前(有效的)用户或组来说是可执行的 |
-o | 文件或目录,由目前(有效的)用户拥有 |
-R | 文件或目录,对实际的用户或组来说是可读的 |
-W | 文件或目录,对实际的用户或组来说是可写的 |
-X | 文件或目录,对实际的用户或组来说是可执行的 |
-O | 文件或目录,由实际的用户拥有 |
-e | 文件或目录,是存在的 |
-z | 文件或目录存在而且没有内容(对目录来说永远是假) |
-s | 文件或目录存在并且有内容(返回值是以字节为单位的文件大小) |
-f | 是否为普通文件 |
-d | 是否为目录文件 |
-l | 是否为符号链接 |
-S | 是否为socket类型的文件 |
-p | 是否为命名管道,即FIFO队列 |
-b | 是否为块设备(比如某个挂载的网盘) |
-c | 是否为字符设备文件(比如某个IO设备) |
-u | 文件和目录设置了setuid位 |
-g | 文件和目录设置了setgid位 |
-k | 文件和目录设置了setcky位 |
-t | 文件句柄是TTY设备 |
-T | 看起来像是文本文件 |
-B | 看起来像是二进制文件 |
-M | 最后一次修改至今的天数 |
-A | 最后一次访问至今的天数 |
-C | 最有一次文件节点编号变更至今的天数 |
注:
- 如无特殊声明,返回的都是布尔真/假值;
- -r -w -x -o需要查看用户ID,看他们是否具有相应的文件权限;
- 有效用户:负责运行这个程序的人。
1.1 同一文件的多个属性测试
如果要一次性测试一个文件的多个属性,可以将个