您的位置:首页 > 其它

Perl文件和目录操作

2013-12-08 17:49 274 查看
Perl操作文件

-e 判断文件是否存在

  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天都没修改过)

example:

找到大于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;
}

检测选项含义
-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 索引节点修改时间(单位:天)

目录操作:

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…
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: