gpt4 book ai didi

linux - 我如何检测 Perl 中的符号链接(symbolic link)已损坏?

转载 作者:IT王子 更新时间:2023-10-29 00:16:18 25 4
gpt4 key购买 nike

我想使用 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 函数 statlstat明确地。在这两者之间,您应该能够弄清楚符号链接(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com