在 Perl 中使用 -s 获取文件大小
Posted
技术标签:
【中文标题】在 Perl 中使用 -s 获取文件大小【英文标题】:Get filesize with -s in Perl 【发布时间】:2010-08-24 19:09:07 【问题描述】:我正在尝试使用-s
运算符查找文件的大小。它看起来像这样:
my $filesz = -s $filename
我尝试了很多不同的方法,但它无法达到这个尺寸。 但是,如果我提供静态内容而不是文件名,它可以正常工作
例如:
$filesz = -s "/tmp/abc.txt"
这很好用。
我尝试在文件名中添加"
,但没有成功。我使用chomp
从文件名中删除了\n
,但问题仍然存在。这里有什么问题?
【问题讨论】:
-s $filename if -e $filename
你有没有把$filename
的内容打印出来看看是不是你想的那样?
@Ether: 我做到了.. 只是它是 \n 不容易看到 :)
【参考方案1】:
-s $filename
工作得很好;唯一的结论是$filename
中没有包含名称的文件。仔细查看$filename
的内容,并确保您的工作目录是您认为的那样。
【讨论】:
有两个问题 1. 有一个 \n 没有被正确地咀嚼。它在打印 2 中不可见。我在路径周围添加了 " 字符,但它不适用于 -s。 @Jack 听起来你的问题实际上是\r
,而不是\n
(你的问题本来可以通过:crlf
I/O 层解决,它在\r\n
和\n
)。不管怎样,很高兴你把它解决了。【参考方案2】:
As hobbs says,最可能的解释是$filename
不包含您认为的内容。
根据以前的经验,我会走得更远,并犹豫猜测$filename
的末尾有一个换行符。您是从文件中还是从用户输入中读取$filename
中的值?
【讨论】:
是的,这是问题之一。我从 readdir 循环中获取文件名。【参考方案3】:我认为你应该尝试从 readdir 获取这个:
#!/usr/bin/perl -w
use strict;
use warnings;
my $filedir = "/documents/sample/file.txt";
opendir(my $dir, $filedir) or die "Could not load directory";
my @read_dir = sort grep !-dreaddir($dir);
foreach my $fileInDir(@read_dir)
my $currentDestination = "$filedir/$fileInDir";
my $filesize = -s $currentDestination;
if(-z $currentDestination)
print "Zero - Filename: $fileInDir Size: $filesize\n";
else
print "Non - Zero Filename: $fileInDir Size: $filesize\n";
【讨论】:
以上是关于在 Perl 中使用 -s 获取文件大小的主要内容,如果未能解决你的问题,请参考以下文章