perl学习笔记——目录操作
在目录书中移动
chdir 操作副改变当前的工作目录。它和shell中cd命令类似:
chdir ‘/etc’ or die “cannot chdir to /etc:$1”;
注意:工作目录不能更改的,也就是说Perl程序返回后一定会回到所在的工作目录。
如果调用chdir时不加参数,Perl会猜想是想要回到用户主目录,并将工作目录设成主目录,这和shell下使用不加参数的cd命令效果相同。
注意:可不能使用波浪符~。
文件名通配
形如:echo *.pm;其中通配符是*。在Perl中同样适用:
my @all_files=glob ‘*’;
My @pm_files=glob ‘*.pm’;
其中,@all_files取得当前目录中的所有文件并且按照字母顺序排序,但不包括以点号开头的文件,这和shell中的做法完全相同(ls)。
如果需要一次匹配多种模式,可以在参数中用空格隔开各个模式:
my all_files_including_dot=glob '*.gz *.pl';
文件通配的另一种语法
使用<>完成glob的功能,如:
my @all_files=<*>;#效果等同于: my @all_files=glob “*”;
Perl会把尖括号<>内出现的变量替换为他的值,类似与双引号内字符串的变量内插。
my $dir='/etc';
my @dir_files=<$dir/* $dir/.*>;
假如尖括号即表示从文件句柄中读取有代表文件名通配操作,那Perl如何取舍?
因为合理的文件句柄必须是严格意义上的Perl标识符,所以如果尖括号内满足Perl标识符条件的,就作为文件句柄来读取;否则就代表文件名通配符。如:
上述规则唯一例外就是当尖括号内仅仅是一个简单的标量变量时,那么他就是间接文件句柄读取,其中变量的值就是带读取的文件句柄名称。
目录句柄
opendir(代替open) 打开目录句柄;
readdir (代替readline)读取目录句柄的内容;
closedir(代替close) 关闭目录句柄;
对比:
#!/usr/bin/env perl use 5.010; open AA,'<','aa'; while(1){my $line=readline AA;if($line eq ""){last;#不知道为什么,用break出现了错误。}print "$line"; } close AA;
目录句柄的缺点:目录句柄返回的名称列表并未按照特定的顺序排列。同时列表中将包含所有文件,而不是匹配某些模式的部分(如:*.pm)。同时列表中包含了名称一点号开头的文件,.和..也在其中。所以如果我们只想处理名称以pm结尾的文件,则可以在玄幻内使用一个跳过函数:
while($name=readdir $dh){
next unless $name=~ /\.pm$/; #处理名称以pm结尾的文件
next if $name =~ /^\./;#去掉以点号开头的文件
.....其他对文件名的处理......
}
因为readdir操作符返回的只是文件名并不包含路径名,所以他们只是目录里的文件名而已。
而有时候为了更加方便操作,也是更加清晰,使用下面的操作:
递归访问目录(主要为了实现shell中的find命令操作)
使用File::find模块。
使用File::Find::Rule和File::Finder操作具有更好的用户界面和可操作姓。
File::Find::Rule==>http://search.cpan.org/~rclamp/File-Find-Rule-0.33/lib/File/Find/Rule.pm;
如:
#!/usr/bin/env perl use 5.010; use File::Find::Rule; #say "INC==@INC"; @DIR=qw (/home/lukexwang/PerlDemo); use lib '.'; my @files=File::Find::Rule->file() ->name( '*.pl' ) ->in(@DIR); say "@files";
文件和目录的操作
删除文件:unlink
unlink 'slate','bedrock','lava';
unlink qw(slate bedrock lava);
联合glob函数和unlink函数:
unlink glob '*.o';==rm *.o;
unlink的返回值代表成功删除的文件数目。
只知道数目并不知道具体是删除了哪一个,如果一定要知道是删除了哪一个可以递归删除,如下面的语句:
这个命令只能删除文件,不能删除目录(rmdir).
重命名文件
rename 'old','new';====>shell中的mv 命令
既然和mv类似,那当然可以将文件移动到其他的目录下:
很多人喜欢用胖箭头:
新闻组中最常见的就是以.old结尾的文件改名为.new结尾。下面是代码:
链接和文件
硬链接:link 'chicken','egg' or warn "can't link chicken to egg:$!";#为egg创建连接chicken
软链接:symlink 'dodgson','carroll' or warn "can't symlink dodgson to carroll:$!";
要取得软链接指向的位置,使用readlink函数。他会指向软连接的位置,如果参数不是符号连接,则返回undef;
创建和删除目录
mkdir 'fred',0755 or warn "Cannot make fred directory:$!";#fred为名字,0775为权限
注意不要漏了开头的0(代表八进制),否则就是10进制的755,这等于八进制的1363。
注意下面的用法:
系统会把0755当作十进制来处理,所以相当于我们用01363权限创建了一个目录;
所以需要使用oct函数,他能强行把字符串当作八进制处理,无论其是否以0开头:
删除目录:rmdir函数,用法类似于unlink函数。但是每次只能删除一个目录。
注意:对于非空目录调用rmdir函数会导致失败。所以可以先用unlink删除目录中的内容,在试着移除已经清空的目录。
这个方法并不是很好,如果是两层以上的目录,删除就必须用递归了。具体还不太懂,等着补充!!!
$$是进程代号。
修改权限
chmod 0755,'fred','barney';
但是不能用:+x 或者go=u-w等参数。
修改隶属关系
chown函数修改一系列文件的拥有者及其所属组。拥有者和所属组会被同时修改,并且指定时必须给出数字形式的用户标识符和组标识符。如:
如果要处理的不是数字,而是想merlyn这样的字符串呢?该如何,使用getpwnam函数将用户名转换成用户编号,再使用getgrnam函数把用户组名转换成组编号:
转载于:https://www.cnblogs.com/lukexwang/p/4679214.html
perl学习笔记——目录操作相关推荐
- python学习笔记目录
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...
- 操作系统学习笔记目录(暂时不全223)
操作系统学习笔记目录章节汇总 (暂时不全,目前只有第一章+第二章-浅谈线程,进程-2020.3.6) 文章目录 操作系统学习笔记目录章节汇总 1.打开钢琴的盖子(序章) 1.1-操作系统的概念(定义) ...
- C++学习笔记目录链接(持续更新中)
学习目标: C++学习笔记目录链接(持续更新中,未完待续) 学习内容: 序号 链接 0 C++ 常见bug记录(持续记录中) 1 C++学习笔记1[数据类型] 2 C++学习笔记2[表达式与语句] 3 ...
- JavaWeb学习笔记-目录(待完成)
JavaWeb学习笔记-目录(待完成) 01-基础加强(注解+反射) 02-mysql基础 03-mysql约束 04-mysql多表事务 05-jdbc 06-jdbc连接池JDBCTemplate ...
- JavaSE进阶学习笔记-目录汇总(待完成)
声明:此博客来自于黑马程序员学习笔记,并非商用,仅仅是为了博主个人日后学习复习用,如有冒犯,请联系qq208820388立即删除博文,最后,来跟我一起喊黑马牛逼黑马牛逼黑马牛逼 JavaSE进阶学习笔 ...
- Apache Nutch 1.3 学习笔记目录
目录 Apache Nutch 1.3 学习笔记一 Apache Nutch 1.3 学习笔记二 Apache Nutch 1.3 学习笔记三(Inject) Apache Nutch 1.3 学习笔 ...
- 软考信息安全工程师学习笔记目录
软考信息安全工程师学习笔记目录 欢迎加入最棒的信息安全工程师社群,分享信息安全工程师备考干货资料. 备考交流QQ群:39460595 2019年软考信息安全工程师备考学习资料包 1.<信息安全工 ...
- 2019年Java Web学习笔记目录
Java Web学习笔记目录 1.Java Web学习笔记01:动态网站初体验 2.Java Web学习笔记02:在Intellij里创建Web项目 3.Java Web学习笔记03:JSP元素 4. ...
- memcached高速缓存学习笔记002---telnet操作memcached
memcached高速缓存学习笔记002---telnet操作memcached 停止memcached memcached.exe -d stop 停止 memcached.exe -p 112 ...
最新文章
- jps命令(Java Virtual Machine Process Status Tool)(转)
- 嵌入式Linux USB驱动开发之教你一步步编写USB驱动程序
- 沾包 nagle算法等
- Android Bundle类,通过bundle实现在两个activity之间的通讯
- ASP.NET 开发人员不必担心 Node 的五大理由
- 2的负x次幂图像_数学| NO.2,3 函数 T15
- 网络资源的初始化与释放(C++ RAII惯用法)
- Linux从入门到精通——文件传输
- windows下游戏服务器端框架Firefly安装说明及demo运行
- 高中计算机网络培训心得体会,高中老师信息技术培训心得体会
- HTML5的Web SQL DataBase本地数据库增删改查
- matlab飞机飞行模型,使用 MATLAB/Simulink 设计无人机飞行控制系统(二、动力学模型建立)...
- PowerBI Report Server借助Wap与ADFS实现集成一
- Python画图显示中文
- team viewer如何解绑设备
- 2020,我不想奋斗了
- Win10 或者Win7 64位系统安装32位的CAD2010教程
- 把书读薄:《上帝掷骰子吗-量子物理史话》
- 基于python的课程网站的设计与实现
- 针对Vmware打开BIOS中VT虚拟化相关后仍然报错
热门文章
- 数据库学习建议之提高数据库速度的十条建议
- java if else过多_Spring Boot中如何干掉过多的if else!
- 优衣库不雅_Uniqlo主页-用户体验案例研究
- mysql下载哪一代版本好_潮一代更好的设计
- sketch钢笔工具_Sketch和Figma,不同的工具等于不同的结果
- 第二周web作业1:简单的注册表单
- Java:反射+泛型:获取类型参数的实例
- NFS服务的配置过程
- 1-100之间的奇数
- Why Apache Spark is a Crossover Hit for Data Scientists [FWD]