我有一个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";
}

08-26 12:23