2026-01-28 02:51:05
Perl提供了多种目录操作功能,包括移动、文件匹配、目录句柄、文件删除与重命名、链接管理、目录创建与删除、权限修改、隶属关系变更以及时间戳调整。以下是详细说明:
目录移动使用chdir '路径名'可更改程序执行路径,类似Linux的cd命令。若返回假值,则操作失败。
文件名通配
glob操作符可匹配文件名,例如:
my @all_files = glob '*'; # 当前目录所有文件(字母排序,不含点开头文件)my @pm_files = glob '*.pm'; # 匹配.pm文件my @files = glob '/tmp/* /home/*'; # 匹配多目录文件my @all_files = glob '* .*'; # 包含点开头文件等价写法:my @all_files = <*>。
目录句柄通过opendir、readdir、closedir操作目录句柄:
opendir(my $dh, $dir);foreach my $file (readdir $dh) { $file = "$dir/$file"; # 需添加路径才能进行文件测试 if (-f $file) { say "普通文件"; } if (-d $file) { say "目录"; }}closedir $dh;readdir返回的文件名不包含路径,且顺序随机,包含.和..。
文件删除使用unlink删除文件,支持通配符:
unlink qw(slate bedrock lava); # 删除指定文件unlink glob '*.o'; # 删除所有.o文件返回成功删除的文件数,失败时$!存储错误信息。
文件重命名rename 'old', 'new'可重命名或移动文件:
foreach my $file (glob "*.old") { (my $newfile = $file) =~ s/.old$/.new/; rename $file, $newfile or warn "重命名失败: $!";}链接管理
硬链接:link 'chicken', 'egg'(共享inode,不可跨文件系统或链接目录)。
符号链接:symlink 'dodgson', 'carroll'(指向任意路径,可跨文件系统)。
使用readlink获取符号链接目标:my $target = readlink 'carroll'。
目录创建与删除
创建目录:mkdir 'fred', 0755(权限需用oct转换字符串)。
删除空目录:rmdir 'fred';非空目录需先清空内容或使用File::Path::rmtree。
权限修改chmod 0755, 'fred', 'barney'修改文件权限,返回成功更改的数量。
隶属关系变更使用chown通过数字ID修改所有者及组:
my ($user, $group) = (1004, 100);chown $user, $group, glob '*.o';字符串需转换:getpwnam(用户)和getgrnam(组)。
时间戳调整utime修改访问和修改时间(ctime不可变):
my $now = time;my $ago = $now - 86400; # 24小时前utime $now, $ago, glob '*';注意事项: