Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133298
  • 博文数量: 21
  • 博客积分: 576
  • 博客等级: 中士
  • 技术积分: 319
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-23 16:19
个人简介

没评论

文章分类

全部博文(21)

文章存档

2013年(1)

2012年(20)

我的朋友

分类: Python/Ruby

2012-07-02 15:11:57

可以用chdir操作符来改变当前的工作目录。
chdir "/etc" or die "Cannot chdir to /etc:$!";

文件名通配
perl命令行的文件名可以使用文件名通配。
perl show-args *.pm  #@ARGV为当前目录下所有后缀名为pm的文件
用glob 操作符可以把文件名通配展开成相匹配的文件名,例:
my @all_files = glob "*"; #取得当前目录下所有的文件名,但不包括以点开头的文件
my @all_files_including_dot = glob".* *"#取得当前目录下所有文件名,通配名间空格隔开

文件名通配的另外用法
可以使用尖括号来替代glob的功能:
my @all_files = <*>;
在尖括号中的变量可以内插为变量值:
my @dir_files = <$dir/* $dir/.*>;
perl判断尖括号里是文件句柄还是文件名通配的标准是:如果尖括号内是满足perl标识符条件的,就作为文件句柄来读取,否则就代表是文件名通配操作。

可以用目录句柄来读取目录下的所有文件名
my $dir_to_process = '/etc';
opendir my $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;

删除文件
perl中使用unlink操作符来删除文件:
unlink "slate","bedrock","lava"; #删除这3个文件
由于unlink的参数是列表,而blob函数返回值也是列表,两者可以结合使用:
unlink glob "*.o"; #删除通配*.o的文件
unlink的返回值为成功删除的文件个数,可以以此来检查是否成功执行:
my $successful = unlink "slate","bedrock","lava";
print "I deleted $successful file(s) just now\n";

重命名文件
perl可以用rename函数重命名文件:
rename "old","new"; #将old改名为new
rename "oldfile/old","newfile/new"; #将oldfile下的old文件移动到newfile下并改名为new
rename函数返回值为真或假。

链接与文件
link "dog","cat"; #相当于shell下ln dog cat
symlink "dog","cat"; #相当于shell下ln -s dog cat
建立及移除目录
perl调用mkdir来建立目录:
mkdir "fred", 0755 or warn "cannot create:$!";#建立目录fred,并设权限位0755
注意这里不能把字符串直接当成数字使用:
my $name = "fred";
my $permissions = "0755";  #0755为字符串
#mkdir $name,$permissions;  #不能如此使用,这里0755会被认为是10进制的755
mkdir $name,oct($permissions); #强制把字符串当做8进制数字处理

可以使用rmdir函数移除空目录,它的用法和unlink函数很像,但是每次只能删除一个目录:
foreach my $dir (qw(fred barney betty)) {
  rmdir $dir or warn "cannot rmdir $dir: $!\n";
}
对于非空的目录,rmdir操作符会执行失败。

修改权限
perl可以使用chmod函数来修改权限:
chmod 0755 , "fred","barney";
第一个参数是权限,后面是要更改的对象,返回值为修改成功的数量。
注意:perl的chmod函数不接受符号表示的权限(例如+x或go=u-w)。

修改隶属关系
操作系统许可的情况下,可以用chown函数来更改一系列文件的拥有者以及它们所属的组。chown可以同时更改拥有者和所属组,它们必须是以数字形式的用户标识符和组标识符。例:
defined(my $user = getpwnam "merlyn") or die "bad user";
defined(my $group = getgrnam "users") or die "bad group";
chown $user,$group,glob "/home/merlyn/*";
#getpwnam "merlyn"为获取merlyn的数字形式的用户标识符。 getgrnam "users"为获取users的数字形式组标识符。

修改时间戳
utime函数可以用来修改文件的时间戳,前两个参数为新的访问时间和更改时间,其它参数为要修改的文件名列表。例:
my $now =time; #取得当前时间
my $ago = $now ? 24*60*60; #取得一天前时间
utime $now,$ago,glib "*"; #将当前目录下所有文件最后访问时间改成当前,最后修改时间为前一天




阅读(1207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~