Perl-目录操作

Perl-目录操作
最新回答
聆听初春意

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 '*';

注意事项:

  • 文件测试需添加路径(如-f "$dir/$file")。
  • 目录操作需处理错误(检查返回值或$!)。
  • 符号链接与硬链接行为不同,需根据场景选择。