Perl中的文件测试操作符

内置函数文件操作

Perl中可以通过两个内置函数stat(),lstat()计算文件大小;

my @stat = stat "/path/of/the/file/filename";

lstat()、stat()会返回一个13个元素的数组,每个元素有各自的含义:

  1. dev :文件所属文件系统的设备ID
  2. inode :文件inode号码
  3. mode :文件类型和文件权限(两者都是数值表示)
  4. nlink :文件硬链接数
  5. uid :文件所有者的uid
  6. gid :文件所属组的gid
  7. rdev :文件的设备ID(只对特殊文件有效,即设备文件)
  8. size :文件大小,单位字节
  9. atime :文件最后一次访问的时间戳(从1970-01-01开始计算的秒数)
  10. mtime :文件最后一次修改的时间戳(同上)
  11. ctime :文件创建的时间戳(同上)
  12. blksize :文件所属文件系统的磁盘块大小
  13. blocks :文件占用block数量(一般是512字节的块大小,可通过unix的stat -c "%B"获取块的字节)

这里需要注意,给出的时间是一个数字,需要转换;

my $atime = (lstat "/home/luna/LunaDisk/refine-master/AnnoPipeline.V1.pl")[8];
print "$atime\n";
##输出是:   1568920688
my $trantime = localtime $atime;
print "$trantime\n";
##输出是:  Thu Sep 19 21:18:08 2019

Perl中的文件测试操作符

文件大小测试符:

-e 文件或者目录存在
-z 文件是否存在且为空(对目录而言,永远为假)
-s 文件是否存在且不为空,返回值是文件大小,单位为字节

文件类型测试符

-f 文件是否为普通文件
-d 文件是否为目录文件
-l 文件是否为软链接(字符链接)
-b 文件是否为块设备
-c 文件是否是字符设备文件
-p 文件是否为命名管道
-S 文件是否为socket文件

权限类测试符

首先区分一下
Real uid:文件调用者的uid
Effective uid:文件调用最后生效的uid

-r 文件或目录(对effective uid)是否可读
-w 文件或目录(对effective uid)是否可写
-x 文件或目录(对effective uid)是否可执行
-o 文件或目录(对effective uid)的所有者

-R 文件或目录(对real uid)是否可读
-W 文件或目录(对real uid)是否可写
-X 文件或目录(对real uid)是否可执行
-O 文件或目录(对real uid)的所有者

-u 文件或目录是否设置了setuid (setuid只对可执行普通文件有效)
-g 文件或目录是否设置了setgid (setgid只对普通文件或目录有效)
-k 文件或目录是否设置了sticky (sticky属性只对目录有效)

其它测试符

-M 最后一次修改(mtime)距离目前的天数,修改的年龄
-A 最后一次访问(atime)距离目前的天数,访问的年龄
-C 最后一次inode修改(ctime)距离目前的天数
-M/-A/-C会计算天数,它是(小时数/24)来计算的。例如,6小时前修改的文件,它的天数就是0.25天。

-T 文件看起来像文本文件
-B 文件看起来像二进制文件
-t 文件句柄是否为TTY设备(该测试只对文件句柄有效)

Perl文件测试操作和stat函数
Perl文件测试

你可能感兴趣的:(Perl中的文件测试操作符)