Rac*_*hel 4 unix perl storage command file
根据评论更新:
我有outlog.txt包含多个文件名的文件,例如:2345_535_Dell&HP_3PAR_DEAL.txt,类似地有很多文件名但不是文件所在的实际文件夹,所以在代码中我将文件名附加到文件夹路径以获取实际的文件位置.现在,我想获得存在outlog.txt的所有文件的磁盘使用情况以及存在的所有文件的磁盘使用总量outlog.txt.
我已经尝试了两种方法perl -s和我的($ size)= split('',du`"$ folderpath/$ _"`)但两种方法都给了我不同的值,而且当我使用的时候du比得到一些数值但是它不给我单位,有没有一种方法,我可以不使用-h选项让人类可读,因为它不能在我的系统上工作?
背景资料
我的目标是获取文件的大小,目前我perl -s用来获取文件大小.我也试过,du并获得相同文件大小的不同值.我无法理解这是如何工作的.
问:为什么du和perl -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 ...]
Run Code Online (Sandbox Code Playgroud)
码:
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";
Run Code Online (Sandbox Code Playgroud)
礼貌:RickF
更新:
问:
如何获取每个文件的磁盘使用值而不是文件大小,这意味着我如何获得每个文件的du值而不是文件的perl -s值?
操作系统信息 uname: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";
Run Code Online (Sandbox Code Playgroud)