다음 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;
}
답변2
사용파일::찾기디렉터리 트리를 재귀적으로 탐색합니다.
perl -MFile::Find -wE '
find(sub { push @all, $File::Find::name }, "/tmp");
say for (sort { -s $b <=> -s $a } @all)[0..9]'
파일이 너무 많아 파일을 받은 경우 Out of memory
크기를 반환하고 external을 사용하여 sort
출력 head
을 제한하세요.
perl -MFile::Find -wE 'find(sub { say -s $_, " $File::Find::name" }, "/tmp")' \
| sort -nr | head -n10
답변3
zsh -c 'ls -ldS /tmp/**/?(DOL[1,10])'
가장 l
큰 단일 문자 s
파일( )과 하위 디렉터리( )는 크기별로 정렬됩니다.10
L
?
/tmp
**/
S
가장 큰 10개의 파일만 필요한 경우 perl
전체 파일 목록을 메모리에 저장하지 않으려면 및 를 사용하세요.
perl -MFile::Find -e '
find(
sub {
if (length == 1 && $_ ne ".") {
@s = sort {$b->[0] <=> $a->[0]} [-s, $File::Find::name], @s;
splice @s, 10
}
}, "/tmp"
); printf "%16d %s\n", @{$_} for @s'
( 제안한 대로 length == 1 && $_ ne "."
단일 바이트 파일 이름과 일치 )/tmp/?
대신 printf "%16d %s\n", @{$_}
솔루션에서처럼 ls
실행할 수도 있습니다.zsh
exec "ls", "-ldS", map $_->[1], @s
답변4
bash를 사용하면 더 쉽다고 말하고 싶습니다.
find ${PATH_TO_PARENT_FOLDER} -type f -exec du -ahx {} + | sort -rh | head -10
기본적으로 우리는 이를 find
폴더 내의 모든 파일을 찾는 데 사용합니다.
-type
f
파일이나d
디렉토리 의 경우-exec
find의 출력을 사용하여 명령을 실행하고 찾기 결과를 인수로 입력합니다.{}
그런 다음 찾기 및 추가를 수행하여 du
찾은 각 요소의 크기를 계산합니다.
-a, --all
디렉토리뿐만 아니라 모든 파일에 대한 쓰기 수-h, --human-readable
사람이 읽을 수 있는 형식의 인쇄 크기(예: 1K 234M 2G)-x, --one-file-system
다른 파일 시스템의 디렉터리 건너뛰기
그런 다음 파이프라인을 통해 가장 큰 것부터 가장 작은 것까지 정렬하고 head를 사용하여 상위 10개만 표시합니다.
sort
출력 결과 정렬
-h, --human-numeric-sort
사람이 읽을 수 있는 숫자 비교(예: 2K 1G)-r, --reverse
비교 결과 반전
head
상위 결과만 읽기
-<N>
보려는 행 수를 1부터 N까지 설정하세요.