曲径通幽论坛

标题: 文件测试符 [打印本页]

作者: beyes    时间: 2011-10-10 22:54
标题: 文件测试符
文件测试操作符含义
-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.





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2