我有一个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和“ones”,而不是“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]只包含“ones”,mylittlearray [2]将包含“8”等等
关于如何实现这一目标的任何想法?
答案 0 :(得分:3)
您的问题并没有明确说明,但如果您只是想从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";
}
答案 1 :(得分:1)
使用map
代替split
:
my $dir = "/dir1/dir2/";
my @mylittlearray = map { m!(\d+)\s+$dir(.*)! } `du --max-depth=1 '$dir'`;
print join(", ", @mylittlearray), "\n";