Perl操做文件less
-e 判断文件是否存在socket
die “Oops! A file called‘$filename’already exists.\n”; if –e $filename;函数
-M 查看文件多久没有修改测试
warn “Config file is looking pretty old!\n”; if –M CONFIG > 28; (文件在过去的28天都没修改过)ui
example:spa
找到大于100K,而且在90天内未被访问过的文件索引
my@ariginal_files = qw/ fred barney betty Wilma pebbles dino bam-bamm/;
my @big_old_files; #要移到备份磁带上的文件
foreach my $filename (@original_files){
push @big_old_files, $filename
if –s $filename > 100_100 and –A $filename > 90;
}ip
检测选项含义
-r 文件或目录对此(有效的)用户(effective user)或组是可读的
-w 文件或目录对此(有效的)用户或组是可写的
-x 文件或目录对此(有效的)用户或组是可执行的
-o 文件或目录由本(有效的)用户全部
-R 文件或目录对此用户(real user)或组是可读的
-W 文件或目录对此用户或组是可写的
-X 文件或目录对此用户或组是可执行的
-O 文件或目录由本用户全部
-e 文件或目录名存在
-z 文件存在,大小为0(目录恒为false)
-s 文件或目录存在,大小大于0(值为文件的大小,单位:字节)
-f 为普通文本
-d 为目录
-l 为符号连接
-S 为socket
-p 为管道(Entry is a named pipe(a“fifo”))
-b 为block-special 文件(如挂载磁盘)
-c 为character-special 文件(如I/O 设备)
-u setuid 的文件或目录
-g setgid 的文件或目录
-k File or directory has the sticky bit set
-t 文件句柄为TTY(系统函数isatty()的返回结果;不能对文件名使用这个测试)
-T 文件有些像“文本”文件
-B 文件有些像“二进制”文件
-M 修改的时间(单位:天)
-A 访问的时间(单位:天)
-C 索引节点修改时间(单位:天)ci
目录操做:it
chdir 改变工做目录
chdir “/etc”or die “cannot chdir to /etc: $!”;
glob 文件名匹配
my @pm_files = glob “*.pm” 匹配全部.pm文件
unlink 删除文件 (返回值为成功删除的文件个数)
unlink “slate”, “bedrock”, “lava”;
unlink glob “*.o”; 删除全部.o文件
rename 重命名 (相似于mv)
rename “old”, “new”;
link 硬链接
symlink 软链接
mkdir 建立目录
mkdir “fred”, 0755 or warn “Cannot make fred directory: $!”;
my ($name, $perm) = @ARGV; #前面两个参数是名字和权限
mkdir $name, oct($perm) or die “cannot create $name: $!”; #oct将参数强制转为8进制,无论前面有没有0
目录句柄
从给定目录获得其文件名列表的方法还能够使用目录句柄(directory handle)。目录句柄外形及其行为都很像文件句柄。打
开(使用opendir 而非open),从中读入(使用readdir 而非readline),关闭(使用closedir 而非close)。不是读入文件的内
容,而是将一个目录中的文件名(以及一些其它东西)读入,如:
my $dir_to_process = “/etc”
opendir DH, $dir_to_process or die “Cannot open $dir_to_process: $!”;
foreach $file(readdir DH) {
print “one file in $dir_to_process is $file\n”;
}
closedir DH;
readdir用在while中
while ($name = readdir DIR) {next unless $name =~ /\.pm$/;… more processing…}