我有一个Perl脚本,其中包含以下代码片段:
@mylittlearray = split(/\/dir1\/dir2\//, `du --max-depth=1 \/dir1\/dir2\//`
print $mylittlearray[0];
print $mylittlearray[1];
print "\n";
输出是
24 ones
8
mylittlearray[0]和[1]应该只返回24和“1”,而不是“ones8”。如果我将du命令管道化到一个文件并在vim中打开set list,我会看到以下内容:
24^I./ones$
8^I./twos$
如果我用
du
运行-0
命令,就会看到:24 ./ones^@8 ./twos^@8 ./threes^@8 ./fours^@8 ./fives^@80 .^@
我正试图找出如何拆分两种格式,以便将目录名与下一个目录的大小分开或拆分。换句话说,我希望mylittlearray[0]等于24,mylittlearray[1]只包含“一”,mylittlearray[2]包含“8”等等。
关于如何完成这项工作有什么想法吗?
最佳答案
您的问题不太清楚,但如果您只是想收集du
中每个结果条目的数据,请循环如下结果:
#!/usr/bin/perl
use strict;
use warnings;
# Capture the output from du
my @array = `du --max-depth=1 /some/folder/`;
# Loop over the output
foreach (@array)
{
chomp; # Strip new-line
my ($size, $dir) = split; # Split on whitespace
print "Dir: $dir, Size: $size\n";
}