文件测试操作符 | 含义
| -r | 文件或目录,对当前(有效的)用户或组来说是可读的
| -w
| 文件或目录,对当前(有效的)用户或组来说是可写的 | -x
| 文件或目录,对当前(有效的)用户或组来说是可执行的 | -o
| 文件或目录,由当前(有效的)用户所拥有 | -R
| 文件或目录,由当前实际的用户或组来说是可读的 | -W
| 文件或目录,由当前实际的用户或组来说是可写的 | -X
| 文件或目录,由当前实际的用户或组来说是可写的 | -O
| 文件或目录,由实际的用户所拥有
| -e
| 文件或目录,是存在的,
| -z
| 文件存在而且没有内容(对目录来说永远为假)
| -s
| 文件或目录存在而且有内容(返回值是以字节为单位的文件大小)
| -f
| 为普通文件
| -d
| 为目录
| -l
| 为符号链接
| -S
| 为 socket 类型文件
| -p
| 命名管道,先入先出的 fifo 队列
| -b
| 块设备文件(比如某个挂载的磁盘)
| -c
| 字符设备文件(比如某个 I/O 设备)
| -u
| 文件或目录设置了 setuid 位
| -g
| 文件或目录设置了 setgid 位
| -k
| 文件或目录设置了 sticky 位
| -t
| 文件句柄时候 TTY 设备(不能对文件名进行此测试)
| -T
| 看起来像是文本文件
| -B
| 看起来像是二进制文件
| -M
| 最后一次修改后到至今的天数
| -A
| 最后一次访问到至今的天数
| -C
| 最后一次文件节点编号(inode)变更后到至今的天数
|
上面,-T 和 -B 两个测试项测试某个文件是文本文件还是二进制文件。之所以说是“看起来像”,那是因为在类 Unix 的系统里,没有任何标志或为会告诉你该文件是个二进制还是文本文件,而 Perl 则是通过“作弊” 的方法来猜测它是否是文本文件还是二进制文件。这个作弊是通过打开文件后并检查开头的几千个字节,然后做出一个合理的猜测。比如它如果看到许多空字节,以及不寻常的控制字符并且还设定了高位的字节,那么改文件看起来就像是个二进制文件。然而,这并不是绝对的准确,在某些文本(如法文或瑞典文)可能会让 Perl 误判。
也不能认为 -T 和 -B 的判断结果必然相反,即要么是文本文件要么是二进制文件。比如,如果文件不存在,那么两者都会返回假,因为它既不是文本文件也不是二进制文件。在空文件的情况下,两者都会返回真,因为它既是空的文本文件也是空的二进制文件。
可以一次性用多个属性来测试一个文件:
[Perl] 纯文本查看 复制代码 #!/usr/bin/perl
$file = "hello.txt";
if (-r -w $file) {
print "$file is readable and writeable.\n";
}
假设当前目录下已有一 hello.txt 文件并,那么运行输出:# ls -al hello.txt
-rw-r--r-- 1 root root 12 2011-10-10 22:53 hello.txt
# ./test.pl
hello.txt is readable and writeable. |