在目录书中移动

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学习笔记——目录操作相关推荐

  1. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  2. 操作系统学习笔记目录(暂时不全223)

    操作系统学习笔记目录章节汇总 (暂时不全,目前只有第一章+第二章-浅谈线程,进程-2020.3.6) 文章目录 操作系统学习笔记目录章节汇总 1.打开钢琴的盖子(序章) 1.1-操作系统的概念(定义) ...

  3. C++学习笔记目录链接(持续更新中)

    学习目标: C++学习笔记目录链接(持续更新中,未完待续) 学习内容: 序号 链接 0 C++ 常见bug记录(持续记录中) 1 C++学习笔记1[数据类型] 2 C++学习笔记2[表达式与语句] 3 ...

  4. JavaWeb学习笔记-目录(待完成)

    JavaWeb学习笔记-目录(待完成) 01-基础加强(注解+反射) 02-mysql基础 03-mysql约束 04-mysql多表事务 05-jdbc 06-jdbc连接池JDBCTemplate ...

  5. JavaSE进阶学习笔记-目录汇总(待完成)

    声明:此博客来自于黑马程序员学习笔记,并非商用,仅仅是为了博主个人日后学习复习用,如有冒犯,请联系qq208820388立即删除博文,最后,来跟我一起喊黑马牛逼黑马牛逼黑马牛逼 JavaSE进阶学习笔 ...

  6. Apache Nutch 1.3 学习笔记目录

    目录 Apache Nutch 1.3 学习笔记一 Apache Nutch 1.3 学习笔记二 Apache Nutch 1.3 学习笔记三(Inject) Apache Nutch 1.3 学习笔 ...

  7. 软考信息安全工程师学习笔记目录

    软考信息安全工程师学习笔记目录 欢迎加入最棒的信息安全工程师社群,分享信息安全工程师备考干货资料. 备考交流QQ群:39460595 2019年软考信息安全工程师备考学习资料包 1.<信息安全工 ...

  8. 2019年Java Web学习笔记目录

    Java Web学习笔记目录 1.Java Web学习笔记01:动态网站初体验 2.Java Web学习笔记02:在Intellij里创建Web项目 3.Java Web学习笔记03:JSP元素 4. ...

  9. memcached高速缓存学习笔记002---telnet操作memcached

    memcached高速缓存学习笔记002---telnet操作memcached 停止memcached  memcached.exe  -d stop 停止 memcached.exe -p 112 ...

最新文章

  1. jps命令(Java Virtual Machine Process Status Tool)(转)
  2. 嵌入式Linux USB驱动开发之教你一步步编写USB驱动程序
  3. 沾包 nagle算法等
  4. Android Bundle类,通过bundle实现在两个activity之间的通讯
  5. ASP.NET 开发人员不必担心 Node 的五大理由
  6. 2的负x次幂图像_数学| NO.2,3 函数 T15
  7. 网络资源的初始化与释放(C++ RAII惯用法)
  8. Linux从入门到精通——文件传输
  9. windows下游戏服务器端框架Firefly安装说明及demo运行
  10. 高中计算机网络培训心得体会,高中老师信息技术培训心得体会
  11. HTML5的Web SQL DataBase本地数据库增删改查
  12. matlab飞机飞行模型,使用 MATLAB/Simulink 设计无人机飞行控制系统(二、动力学模型建立)...
  13. PowerBI Report Server借助Wap与ADFS实现集成一
  14. Python画图显示中文
  15. team viewer如何解绑设备
  16. 2020,我不想奋斗了
  17. Win10 或者Win7 64位系统安装32位的CAD2010教程
  18. 把书读薄:《上帝掷骰子吗-量子物理史话》
  19. 基于python的课程网站的设计与实现
  20. 针对Vmware打开BIOS中VT虚拟化相关后仍然报错

热门文章

  1. 数据库学习建议之提高数据库速度的十条建议
  2. java if else过多_Spring Boot中如何干掉过多的if else!
  3. 优衣库不雅_Uniqlo主页-用户体验案例研究
  4. mysql下载哪一代版本好_潮一代更好的设计
  5. sketch钢笔工具_Sketch和Figma,不同的工具等于不同的结果
  6. 第二周web作业1:简单的注册表单
  7. Java:反射+泛型:获取类型参数的实例
  8. NFS服务的配置过程
  9. 1-100之间的奇数
  10. Why Apache Spark is a Crossover Hit for Data Scientists [FWD]