我想使用 Perl 删除目录中损坏的符号链接(symbolic link)。
在我看来,我只需要列出一个目录的文件并测试这是一个符号链接(symbolic link) (-l),如果它返回 false 就取消链接。
但似乎在使用 readir 列出所有文件时,我损坏的符号链接(symbolic link)没有被识别为文件。因为我的链接没有指向任何内容,所以我明白为什么。
然后:如何检测 Perl 中的符号链接(symbolic link)是否损坏?
谢谢,
更新
$myDir 中的所有文件都是符号链接(symbolic link),有效或损坏。 当我显示 @files 时,我只得到一个有效符号链接(symbolic link)的列表。
opendir DIR, $myDir;
my @files = grep(/$regexp/,readdir(DIR));
closedir DIR;
print "filenames : @files\n";
最佳答案
有两个主要的相关系统调用,stat()
and lstat()
. lstat()
调用会告诉您它是一个符号链接(symbolic link)(但在其他文件上,其行为与 stat()
相同)。这使您可以确定该名称是一个符号链接(symbolic link)。 stat()
系统调用在符号链接(symbolic link)之后结束,并在链接末尾告诉您有关文件(或目录)的信息。如果 stat()
对符号链接(symbolic link)的调用失败,则说明符号链接(symbolic link)已损坏,或者您正在尝试访问您没有权限的目录或文件。
Perl file test运算符包括 -l
以检测名称是否为符号链接(symbolic link)。您可以使用 Perl 函数 stat
和 lstat
明确地。在这两者之间,您应该能够弄清楚符号链接(symbolic link)是否损坏 - 但您可能应该计划编写一个函数来完成这项工作。
您可能不需要使用 readlink
Perl 函数。当心底层系统readlink()
称呼;它不会返回以 null 结尾的字符串!
有趣的是,Perl 及其 POSIX 模块都不支持 realpath()
功能。然而,PathTools模块确实支持它。如果 realpath
在符号链接(symbolic link)上失败,则符号链接(symbolic link)不起作用(也称为损坏)。
关于linux - 我如何检测 Perl 中的符号链接(symbolic link)已损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6580721/