【发布时间】:2013-05-27 11:31:27
【问题描述】:
我有一个 perl 脚本,它读取一个目录并打印出该目录的文件等等,但是我无法这样做,因为我没有读取权限..
sub func {
my $some_dir = $_[0];
opendir(my $DIR, $some_dir) or die "ERROR!";
while (my $file = readdir($DIR)) {
if (-r $file) { # Read permissions
print "hurray $file!\n";
if (-d $file) { # Directory
print "entering dir...\n";
func($file);
}
} else { # No read permissions..
print "no permissions for $file\n";
}
}
return;
}
如果我使用文件夹结构运行此代码:
file
folder
-file
-file
-folder
--file
--file
我明白了:
hurray file!
hurray folder!
entering dir..
no permissions for file
no permissions for file
no permissions for file # no idea why?? should be folder
no permissions for file
no permissions for file
所以它只打印起始目录中的文件/文件夹,其他所有内容都没有读取权限。然后我尝试对子目录中的所有文件执行chmod 777 file,但我得到了相同的结果..
有什么想法吗?
谢谢。
编辑 - 添加了一些内容以消除混乱。
【问题讨论】:
-
您的文件夹是否设置了
execute位? -
我相信是这样,对我要读取其内容的文件夹执行
ls -l会显示drwxrwxrwx。 -
也许您应该尝试在失败消息中也打印文件名,例如
"no permissions for '$file'\n". -
是的,对不起,我只是在我的示例中省略了这一点。如果我将
$file添加到打印中,它会按预期为每个文件显示no permissions for file(正确的文件名)。
标签: perl recursion directory readdir