gpt4 book ai didi

perl - 为什么 du 和 Perl 的 -s 给出了不同的文件大小值?

转载 作者:行者123 更新时间:2023-12-04 21:54:33 24 4
gpt4 key购买 nike

根据评论更新:

我有 outlog.txt包含多个文件名的文件,例如:2345_535_Dell&HP_3PAR_DEAL.txt ,同样有很多文件名,但不是文件所在的实际文件夹,因此在代码中将文件名附加到文件夹路径以获取实际文件位置。现在,我想获取 outlog.txt 中存在的所有文件的磁盘使用情况以及 outlog.txt 中所有文件的总磁盘使用量.

我尝试了两种方法 perl -s和我的 ($size) = split(' ', du `"$folderpath/$_"`) 但是这两种方法都给了我不同的值,而且当我使用 du 时也是如此比得到一些数值但它没有给我单位,有没有一种方法可以让我在不使用 -h 的情况下获得人类可读性选项,因为它不适用于我的系统?

背景资料

我的目标是获取文件的大小,目前我正在使用 perl -s获取文件大小。我也试过du并且正在为同一文件的大小获取不同的值。我无法理解这是如何工作的。

问:为什么要duperl -s给大小不同的值?它们在内部是如何工作的?两个不同的值中哪个更准确?另外,我不知道为什么 du -h filename给我一个非法表达式错误:

bash-2.03$ du -h test.txt
/usr/bin/du: illegal option -- h
usage: du [-a][-d][-k][-r][-o|-s][-L] [file ...]

代码:
my $folderpath = 'the_path';
open my $IN, '<', 'path/to/infile';
my $total;
while (<$IN>) {
chomp;
my $size = -s "$folderpath/$_";
print "$_ => $size\n";
$total += $size;
}
print "Total => $total\n";

礼貌: RickF

更新:

问:
如何获取每个文件的磁盘使用值而不是文件大小,这意味着如何获取每个文件的 du 值而不是 perl -s文件的值?

操作系统信息
名称 :SunOS
uname -v :Generic_117350-39

更新代码:根据大脑的方法,但仍然将 du 值打印为零而不是实际值,有什么建议吗?

更新:
如果我使用我的 ($size) = split(' ', du "$folderpath/$_" );比我得到 du 值但它给了我一些数字,我如何在不使用 -h 的情况下将其变为人类可读的选项 ?
 #!/usr/bin/perl
use strict;
use warnings;

my $folderpath = '/Project/upload';
open my $IN, '<', 'outlog.txt';
my $total;
while (<$IN>) {
chomp;
#my( $block_size, $blocks ) = ( stat( "$_" ) )[11,12];
#my $du_size = $block_size * $blocks;
my ($size) = split(' ', `du "$folderpath/$_");
#my $size = -s "$folderpath/$_";
print "$_ => $size\n";
$total += $size;
}
print "Total => $total\n";

最佳答案

du报告实际磁盘使用情况,Perl 的 -s报告文件的大小。因此,如果文件长度为 4 个字节,则其大小为 4 个字节,但磁盘使用量为 4 KB(取决于文件系统的设置方式)。

您还将看到 sparse files 的大小有所不同。 .稀疏文件占用的空间比它们声称的要少。

关于perl - 为什么 du 和 Perl 的 -s 给出了不同的文件大小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3773017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com