如何从perl中的命令行参数计算文件的大小

时间:2013-08-16 08:20:50

标签: perl

我正在尝试一个可以计算命令行参数中给出的文件大小的示例程序。当我在变量中存储文件名时,它会正确地给出大小,但是当从命令行参数中获取文件名时不会输出结果。

#! /usr/bin/perl 
use File::stat;

while(<>){
 if(($_ cmp "\n") == 0){
   exit 0;
 }
 else{
   my $file_size =  stat($_)->size; # $filesize = s $_;
   print $file_size;
 }
}

使用文件测试运算符-s时没有输出,使用stat模块时出错:

Unsuccessful stat on filename containing newline at /usr/share/perl/5.10/File/stat.pm line 49, <> line 1.
Can't call method "size" on an undefined value at 2.pl line 17, <> line 1.

1.txt是我给出的文件名作为输入。

2 个答案:

答案 0 :(得分:7)

#!/usr/bin/perl 

for (@ARGV){
  my $file_size = -s $_;
  print $file_size;
}

或类似的cmd oneliner,

perl -E 'say "$_, size: ", -s for @ARGV' *

答案 1 :(得分:0)

#!/usr/bin/perl -w

$filename = '/path/to/your/file.doc';
$filesize = -s $filename;
print $filesize; 

够简单吧?首先,创建一个包含要测试的文件路径的字符串,然后在其上使用-s文件测试运算符。您可以使用简单的方法将此缩短为一行:

print -s '/path/to/your/file.doc';

另外,请记住,如果文件大于零字节,这将始终返回true,但如果文件大小为零,则将返回false。它可以方便快捷地检查零字节文件。