在Perl中,当我试图读取dir一个循环中,并执行for each file stat() 以获得$size和$mode,我得到错误的数据!
例如,我刚刚创建了简单的文本文件,它向我显示它具有权限0000且没有大小.
Perl代码:
if (!@ARGV[0]) {
die("Za ma?o parametrów!\n");
}
$dirname = @ARGV[0];
opendir(DIR, $dirname) || die("Nie mog? otworzy? katalogu!\n");
while( $filename = readdir(DIR) ) {
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);
$perm = sprintf("%04o", $mode & 07777);
$tmp1 = int(($size/1024));
$tmp2 = length($filename);
if (($tmp1 > $tmp2) && ($perm =~ /.[^5410]../)) {
print("$filename\n");
}
}
closedir(DIR);
Run Code Online (Sandbox Code Playgroud)
您需要将完整的文件路径传递给stat()函数.目前您只是传递文件名,因此脚本将在其当前目录中查找此文件.
换句话说,这样做:
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks) = stat("$dirname/$filename");
Run Code Online (Sandbox Code Playgroud)