Perl 目录操作
Perl 语言内置了一些目录操作相关的函数,方便我们列出目录下的文件,创建目录,删除目录等操作
Perl 目录操作函数
下面列出了 Perl 一些操作目录的标准函数
函数 | 描述 |
---|---|
opendir DIRHANDLE, EXPR | 打开目录 |
readdir DIRHANDLE | 读取目录 |
rewinddir DIRHANDLE | 定位指针到开头 |
telldir DIRHANDLE | 返回目录的当前位置 |
seekdir DIRHANDLE, POS | 定位指定到目录的 POS 位置 |
closedir DIRHANDLE | 关闭目录 |
显示所有的文件
glob
函数和 readdir
函数都可以用显示一个目录下的文件
使用 glob 函数列出当前目录下所有文件
#!/usr/bin/perl =pod file: main.pl author: 简单教程(www.twle.cn) Copyright © 2015-2065 www.twle.cn. All rights reserved. =cut # 显示当前目录下的所有文件 $dir = "./*"; my @files = glob( $dir ); foreach (@files ){ print $_ . "\n"; } print "\n"; # 显示当前目录下所有以 .c 结尾的文件 $dir = "./*.c"; @files = glob( $dir ); foreach (@files ){ print $_ . "\n"; } print "\n"; # 显示当前目录下所有隐藏文件 $dir = "/tmp/.*"; @files = glob( $dir ); foreach (@files ){ print $_ . "\n"; } print "\n"; # 显示 /tmp 和 /home 目录下的所有文件 $dir = "/tmp/* /home/*"; @files = glob( $dir ); foreach (@files ){ print $_ . "\n"; }
运行以上范例,输出结果如下
$ perl main.pl ./a.out ./cgi ./demo.p ./demo.txt ./demo2.txt ./demo3.txt ./empty.txt ./exist_file.txt ./extern-support.c ./file.txt ./helloworld ./htdocs ./main.c ./main.cpp ./main.pl ./test.txt ./test1.txt ./tmd.py ./extern-support.c ./main.c /tmp/. /tmp/.. /tmp/.adobeLockFile /tmp/.keystone_install_lock /tmp/0ABD53AA-FC79-49C9-B7BA-D5A930802761 /tmp/1F7D47ED-7F0F-46EB-8A10-64C1F7055256_IN /tmp/1F7D47ED-7F0F-46EB-8A10-64C1F7055256_OUT /tmp/2896C2F0-859A-4ECB-B2A4-2B9ED7B340EA /tmp/A9BE2AEE-31C2-49D6-85BF-5C20725C1BFA /tmp/adobegc.log /tmp/AlTest1.err /tmp/AlTest1.out /tmp/com.adobe.AdobeIPCBroker.ctrl-luojianguo /tmp/com.apple.launchd.dIzMzc4gDs /tmp/com.apple.launchd.whhbWgh9aR /tmp/ExmanProcessMutex /tmp/F3998715-E559-44A6-AC95-D8C7744C6DC3 /tmp/F7C71944B49B446081C0603DE90E4855_IN /tmp/F7C71944B49B446081C0603DE90E4855_OUT /tmp/lilo.3071 /tmp/mongodb-27017.sock /tmp/mysql.sock /tmp/mysql.sock.lock /tmp/perl /tmp/PKInstallSandbox.dGJchr /tmp/zxpsign22RC36iAoQsMQR54 /tmp/zxpsign4cXVB9cz8iuPQE01 /tmp/zxpsignBvdCcPJeSpi55F7k /tmp/zxpsignC0TuqlzjtHEWZL5X /tmp/zxpsigncA5w2R1mJBZPKZpV /tmp/zxpsignEmkBHPIRfABhW70b /tmp/zxpsignFwmoJPjbhZolWFHf /tmp/zxpsigngq5V41JMP0dUDo4c /tmp/zxpsigngxbSkj0qu6A4pyfA /tmp/zxpsignJCuW7KaRT9UVt6sp /tmp/zxpsignJJK24XuoIPFEOEfk /tmp/zxpsignkrOKgrFPR5IOaYe3 /tmp/zxpsignlITwzQlK3w7JUNQH /tmp/zxpsignLlFOvIc1aNPrOozg /tmp/zxpsignNa6Vod7ELmDEvuG8 /tmp/zxpsignU3AxpD3V5Sagd1ia /tmp/zxpsignY253Ab9945nnbha0 /tmp/zxpsignZ1ATOciRFKbHPnX7
使用 readdir 列出目录下所有文件
readdir
函数可以用来列出一个目录下的所有文件
#!/usr/bin/perl =pod file: main.pl author: 简单教程(www.twle.cn) Copyright © 2015-2065 www.twle.cn. All rights reserved. =cut opendir (DIR, '.') or die "无法打开目录, $!"; while ($file = readdir DIR) { print "$file\n"; } closedir DIR;
运行以上范例,输出结果如下
$ perl main.pl . .. a.out cgi demo.p demo.txt demo2.txt demo3.txt empty.txt exist_file.txt extern-support.c file.txt helloworld htdocs main.c main.cpp main.pl test.txt test1.txt
显示目录下所有 .c
结尾的文件
readdir
函数可以用来显示一个目录下的所有文件
下面的范例用来显示当前目录下所有以 .c
结尾的文件
#!/usr/bin/perl =pod file: main.pl author: 简单教程(www.twle.cn) Copyright © 2015-2065 www.twle.cn. All rights reserved. =cut opendir(DIR, '.') or die "无法打开目录, $!"; foreach (sort grep(/^.*\.c$/,readdir(DIR))){ print "$_\n"; } closedir DIR;
运行以上范例,输出结果如下
$ perl main.pl extern-support.c main.c
创建一个新目录
mkdir
函数可以用来创建一个新目录
执行前需要有足够的权限来创建目录
#!/usr/bin/perl =pod file: main.pl author: 简单教程(www.twle.cn) Copyright © 2015-2065 www.twle.cn. All rights reserved. =cut $dir = "/tmp/perl"; # 在 /tmp 目录下创建 perl 目录 mkdir( $dir ) or die "无法创建 $dir 目录, $!"; print "目录创建成功\n";
运行以上范例,输出结果如下
$ perl main.pl 目录创建成功
删除目录
rmdir
函数可以用来删除目录。
执行该操作需要有足够权限。
要删除的目录必须的空目录。
#!/usr/bin/perl =pod file: main.pl author: 简单教程(www.twle.cn) Copyright © 2015-2065 www.twle.cn. All rights reserved. =cut $dir = "/tmp/perl"; # 删除 /tmp 目录下的 perl 目录 rmdir( $dir ) or die "无法删除 $dir 目录, $!"; print "目录删除成功\n";
运行以上范例,输出结果如下
$ perl main.pl 目录删除成功
切换目录
chdir
函数可以用来切换当前工作目录,执行该操作需要有足够权限
#!/usr/bin/perl =pod file: main.pl author: 简单教程(www.twle.cn) Copyright © 2015-2065 www.twle.cn. All rights reserved. =cut $dir = "/home"; # 将当前目录移动到 /home 目录下 chdir( $dir ) or die "无法切换目录到 $dir , $!"; print "你现在所在的目录为 $dir\n";
运行以上范例,输出结果如下:
$ perl main.pl 你现在所在的目录为 /home