微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 如何在Perl中检测到符号链接中断?

我想使用Perl删除目录中损坏的符号链接.

在我看来,我只需要列出一个目录的文件,测试这是一个符号链接(-l),如果它返回false只是取消链接.

但似乎当使用readir列出所有文件时,我的破坏的符号链接不会被识别为文件.因为我的链接指向什么,我理解为什么.

那么:我如何检测Perl中的符号链接是否被破坏?

谢谢,

UPDATE

$myDir中的所有文件都是符号链接,无论是有效还是损坏.
当我显示@files时,我只得到一个有效的符号链接列表.

opendir DIR,$myDir;
my @files = grep(/$regexp/,readdir(DIR));
closedir DIR;
print "filenames : @files\n";

解决方法

有两个主要的相关系统调用,stat() and lstat().lstat()调用将告诉您它是一个符号链接(但在其他文件上,行为与stat()相同).这允许您确定该名称是符号链接. stat()系统调用遵循符号链接到其结尾,并告诉您链接末尾的文件(或目录).如果符号链接上的stat()调用失败,则符号链接中断,或者您正在尝试访问您没有权限的目录或文件.

Perl file test运算符包含-l,用于检测名称是否为符号链接.您可以明确使用Perl函数statlstat.在这些之间,您应该能够理清符号链接是否被破坏 – 但您应该计划编写一个函数来完成这项工作.

您可能不需要使用readlink Perl功能.小心底层系统readlink()通话;它不会返回以null结尾的字符串!

有趣的是,Perl及其POSIX模块都不支持realpath()功能.但是,PathTools模块确实支持它.如果realpath失败,则在符号链接上,符号链接无法使用(也称为已损坏).

原文地址:https://www.jb51.cc/linux/395271.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐