设为首页 收藏本站
查看: 922|回复: 0

[经验分享] Perl学习之目录操作

[复制链接]

尚未签到

发表于 2015-12-28 08:36:42 | 显示全部楼层 |阅读模式
Perl学习之目录操作

  作者:银子
一、在目录树上移动
  程序在某个工作目录(working directory)下运行,这是相对路径的起点。
  chdir可以改变工作目录。它和Unix shell,Win command下的cd命令类似。
  
chdir "/test" or die "打开目录出错:$!";
  错误发生时将给变量$!赋值。通常应当检查$!的值,因为它将告诉你chdir失败的原因。
  工作目录会被Perl启动后的所有进程所继承。但是对于调用Perl的进程的工作目录将不会改变,因此,不能写一个Perl程序来代替shell下的cd命令。
  二、Globbing
  通常,shell将每个命令行中的任何的文件名模式转换成它所匹配的文件名。这被称作globbing。例如,在echo命令后使用了文件名模式*.pm,shell会将它转换成它所匹配的文件名。
  
my @all_files = glob "*";
foreach $v (@all_files)
{
print $v."\n";
}
@all_files得到了当前目录下的所有文件,这些文件按照字母排序的,不包括由点(.)开头的文件。
  
my @all_files = glob ".* *";
foreach $v (@all_files)
{
print $v."\n";
}
这里,我们包括了额外的 点星号(.*) 参数,来得到所有的文件(由点开头的文件,以及不由点开头的文件)。引号中两个项之间的空隔是必须的。
  
三、Globbing的替换语法
  虽然我们任意的使用globbing这个术语,我们也谈论glob操作,但在许多使用globbing的程序中并没有出现glob这个字眼。为什么呢?原因是,许多这类代码在glob操作被命名前就写好了。它使用一对尖括号(<>),和从文件句柄读入操作类似。
  
my @all_files = <*>;
foreach $v (@all_files)
{
print $v.”\n”;
}
NOTE:尖括号中的值同双引号中的值一样,会被内插。
  四、目录句柄
  从给定目录得到其文件名列表的方法还可以使用目录句柄(directory handle)。目录句柄外形及其行为都很像文件句柄。打开(使用opendir 而非open),从中读入(使用readdir 而非readline),关闭(使用closedir 而非close)。不是读入文件的内容,而是将一个目录中的文件名(以及一些其它东西)读入。
  五、递归的目录列表
  Perl有一个叫做File::Find 的库,通过它你可以对递归的目录进行处理。
  六、操作文件和目录
  Perl通常用来处理文件和目录。由于Perl产生于Unix,如今它的大多数应用仍在这上面。
  七、删除文件
  在Perl中,我们使用unlink来删除文件。
  
unlink glob "*.htm";#彻底删除当前目录下所有的htm文件
  unlink返回值告诉我们成功删除的文件数。
  
my $successful = unlink glob "*.htm";
print "删除了 $successful 个文件\n";
  当某个特定的unlink失败时,$!变量会被设成相应的操作系统错误,我们将它包含在消息之中。这只在一次针对一个文件名进行处理时才有效,因为下一个操作系统错误会重置它。
  NOTE:你不能使用unlink 来删除一个目录。
  八、重命名文件
  将一个给定文件重命名可以使用rename函数。
  
rename "5.html","6.html";
  NOTE:可以在不同的目录之间操作。
  九、连接和文件
  link函数创建了一个新的连接。
  unlink删除任意类型的连接。
  十、创建和删除目录
  使用mkdir函数创建目录:
  
mkdir "luoliang",0777 or warn "error: $!";
  第一个参数是目录名称,第二个参数是设置目录权限。
  使用rmdir函数删除目录:
  
rmdir "luoliang";
  删除了刚才新建的luoliang目录
  十一、修改权限
  chomd函数用来修改文件或目录的权限:
  
mkdir "luoliang",0777 or warn "Error:$!";#创建一个新目录,权限为所有权限
chmod 0666,"luoliang";#修改目录权限
  十二、改变所有者
  使用chown函数改变一批文件的所有者及所在的组。
  
my $user = 1004;
my $group = 100;
$v = chown $user, $group, glob "*.htm";
print "$v个文件被修改用户组";
  NOTE:如果你有一个像user这样的用户名,而没有数字怎么办?调用getpwnam函数,将名字转换为数字,而对应的getgrnam将组名转换为数字。
  十三、改变时间戳
  utime函数可以用来修改文件最近修改的时间以及被访问的时间。
  
my $now = time;
my $ago = $now-24*60*60; #一天前
utime $now, $ago, glob "luoliang"; #设成当前访问的,一天之前修改的
  NOTE:第三个时间戳(ctime的值)永远是now,因此不能通过使用utime函数来设置它。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-157232-1-1.html 上篇帖子: learning perl第5章练习题 下篇帖子: Perl风格
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表