在 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 获取文件大小的主要内容,如果未能解决你的问题,请参考以下文章

在目录中按组大小压缩文件

perl 脚本来搜索 java 源代码中区分大小写的文件名

如何检查我是不是在 Perl 中下载了整个文件?

在 perl 中提取 tar.gz 文件

如何在 Chrome 扩展中使用 Javascript 获取文件大小?

使用 lseek 在 C 中获取文件的大小? [关闭]