曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3247|回复: 0
打印 上一主题 下一主题

文件测试符

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2011-10-10 22:54:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
文件测试操作符含义
-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.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 03:47 , Processed in 0.083496 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表