次の perl コマンドを変更する必要があります。
perl -wE 'say for ((sort { -s $b <=> -s $a } </tmp/?>)[0..9]);'
必要:
- ターゲットディレクトリ内のすべてのサブディレクトリを検索する必要があります。
- サイズとパスで最初の10個のファイルを一覧表示します。
ベストアンサー1
File::Find
このPerlスクリプトは、再帰巡回に必要なものを正確に印刷します。私は-f
ファイルだけがハッシュにプッシュされたことを確認しました。
ハッシュにはキーと値が%files
あります。次に値でソートし、上位10件の結果を印刷します。filepath
size
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my %files;
my $counter=0;
find( \&wanted, '<target directory>');
for my $file ( sort {$files{$b} <=> $files{$a}} keys%files){
print "$file : $files{$file}\n";
$counter++;
if ($counter == 10){
last;
}
}
sub wanted {
$files{"$File::Find::name"}=-s $File::Find::name if -f;
return;
}
あるいは、単に配列を使って動作させるだけです。
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my @files;
my $counter=0;
find( \&wanted, '<target directory>');
for my $file ( sort { -s $b <=> -s $a} @files){
my $size = -s $file;
print "$file : $size\n"
$counter++;
if ($counter == 10){
last;
}
sub wanted{
push @files,$File::Find::name if -f;
return;
}