Perlコマンドを変更する必要があります。

Perlコマンドを変更する必要があります。

次の perl コマンドを変更する必要があります。

perl -wE 'say for ((sort { -s $b <=> -s $a } </tmp/?>)[0..9]);'

必要:

  1. ターゲットディレクトリ内のすべてのサブディレクトリを検索する必要があります。
  2. サイズとパスで最初の10個のファイルを一覧表示します。

ベストアンサー1

File::FindこのPerlスクリプトは、再帰巡回に必要なものを正確に印刷します。私は-fファイルだけがハッシュにプッシュされたことを確認しました。

ハッシュにはキーと値が%filesあります。次に値でソートし、上位10件の結果を印刷します。filepathsize

#!/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;
}

おすすめ記事