Perl,读取目录并获取每个文件的stat()

mar*_*rix 1 perl stat opendir

在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)

Mat*_*aly 7

您需要将完整的文件路径传递给stat()函数.目前您只是传递文件名,因此脚本将在其当前目录中查找此文件.

换句话说,这样做:

($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
         $atime,$mtime,$ctime,$blksize,$blocks) = stat("$dirname/$filename");
Run Code Online (Sandbox Code Playgroud)