1. 文件测试操作符:
所有文件操作测试符都写作:-X(X表示特定的操作行为);
文件测试符 |
意义 |
-r |
F/D,当前用户R+ |
-w |
F/D, 当前用户W+ |
-x |
F/D,当前用户执行+ |
-o |
f/d,当前用户拥有 |
-R |
f/d,用户组r+ |
-W |
f/d,用户组w+ |
-X |
|
-O |
|
-e |
f/d,存在 |
-z |
文件存在但没内容(对目录恒为假) |
-s |
f/d存在且有内容,返回字节 |
-f |
普通文件 |
-d |
目录 |
-l |
符号链接 |
-S |
Socket型内容 |
-p |
命名管道。fifo |
-b |
块设备文件,某挂载磁盘 |
-c |
字符设备文件,某个I/O |
-u |
f/d设置了steuid位 |
-g |
设置了Setgid位 |
-k |
设置了sticky位 |
-t |
文件句柄为TTY设备 |
-T |
看起来像文本文件 |
-B |
看起来像二进制文件 |
-A |
最后一次访问距今天数 |
-M |
最后一次修改距今天数 |
-C |
最后一次文件节点编号被更改距今天数 |
1.想以KB为单位衡量文件:
my $size_file= (-s $file) /1024;
2.查询文件的多个性能
if(-r -w -o -x $file ){};
其中性能相当于多个测试的与;
3.stat和lsat函数
在使用这两个函数时,将会得到文件或者文件句柄的很多属性;
4. 按位运算操作符
采用二进制的形式进行计算的:
&、|、^、<<、>>、~;和其他语言表达的意义一样。
5. 在目录树中移动
更改工作目录(仅在Perl程序运行过程中有效):
chdir ' ' or die " reasons ";
当后面不加参数时,则是回到主目录;
6.文件名的通配
类似于shell中echo命令,Perl提供了文件名的通配:
a、glob命令:
my @all_files = glob '*';
单引号内表示通配的格式,可以通配多个格式,中间以空格隔开:
b、采用<>;
代替glob '';
由于前面讲过<>表示从文件句柄读取,所以区分方法就是,当Perl认为<>内内容符合句柄的命名格式时,就按照文件句柄处理,反之,就是通配命令
7. 目录句柄
和文件句柄基本一致,但是他得到的内容不是文件内容而是目录中文件名,另外他得到的几乎是目录的所有文件,所以可能包含不期望的文件,所以需要采用正则表达式对其进行剔除,同时,返回的结果也只有文件名的格式。
8.递归访问目录
File::Find::find(....)
9.文件及目录的操作
a、删除文件
unlink '','','','';以单引号包围要删除的文件名,各文件名以空格隔开
unlink qw(多个文件名,以空格隔开);
可以结合glob删除很多后缀一样的文件:
unlink glob '*.v';
unlink返回值是删除成功文件的个数;可以采用循环判断文件是否删除成功!
10. 重命名文件
rename 'old', 'new';
和shell的mv指令一样,还可以移动文件;
可以结合glob命令完成大量文件后缀的修改。
11.创建和删除目录
创建目录:
mkdir 'file', '权限';
移除空目录采用,rmdir '';但若是目录不为空则无法移除,这时需要采用unlink先删除目录内容
12. 修改权限
chmod 755,'file1','file2';
13. 修改所属关系
chown 在修改时,只接受数字形式的用户标识符和组标识符;
但如果不是数字,咋办?
采用,getpwnam函数完成转换:
defined(my $user = getpwnam 'a') or die "no user";
defined(my $group = getpwnam 'b') or die "no one";
chown $user,$group, glob '/home/a/*';
defined是为了判断是否转换成功。
14. 修改时间
utime函数
#utime 新的访问时间,新的修改时间,被修改的文件;
uttime $new_ac_time,$new_cha_time, file;
file一般glob'匹配属性'的方式来选择
总结
本节提供了关于文件和目录的一些处理函数,大部分的命令和类型与linux命令类似,也有助于理解,在处理文本文件时可以使用。