Как мне найти 10 самых больших файлов в данном каталоге? - PullRequest
7 голосов
/ 02 января 2012

Как найти 10 самых больших файлов в заданном каталоге с помощью Perl или Bash?

РЕДАКТИРОВАТЬ:

  • Мне нужно, чтобы это было рекурсивно.
  • Я хочу видеть только большие файлы, но не большие каталоги.
  • Мне нужно это для работы на Mac OS X 10.6 (версия find).

Ответы [ 4 ]

6 голосов
/ 02 января 2012

Это печатает 10 самых больших файлов рекурсивно из текущего каталога.

find . -type f -printf "%s %p\n" | sort -nr | awk '{print $2}' | head -10
5 голосов
/ 02 января 2012

Это способ сделать это на Perl.(Примечание: нерекурсивная версия, в соответствии с более ранней версией вопроса)

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

Однако я уверен, что для этой работы есть лучшие инструменты.

ETA: Рекурсивная версия, используя File :: Find :

perl -MFile::Find -wE '
    sub wanted { -f && push @files, $File::Find::name }; 
    find(\&wanted, "/given/dir"); 
    @files = sort { -s $b <=> -s $a } @files; 
    say for @files[0..9];'

Чтобы проверить размеры файлов, используйтенапример, printf("%-10s : %s\n", -s, $_) for @files[0..9]; вместо.

5 голосов
/ 02 января 2012
$ alias ducks
alias ducks='du -cs * |sort -rn |head -11'
1 голос
/ 03 января 2012

Как насчет этого -

find . -type f -exec ls -l {} + | awk '{print $5,$NF}' | sort -nr | head -n 10

Тест:

[jaypal:~/Temp] find . -type f -exec ls -l {} + | awk '{print $5,$NF}' | sort -nr | head -n 10
8887 ./backup/GTP/GTP_Parser.sh
8879 ./backup/Backup/GTP_Parser.sh
6791 ./backup/Delete_HIST_US.sh
6785 ./backup/Delete_NORM_US.sh
6725 ./backup/Delete_HIST_NET.sh
6711 ./backup/Delete_NORM_NET.sh
5339 ./backup/GTP/gtpparser.sh
5055 ./backup/GTP/gtpparser3.sh
4830 ./backup/GTP/gtpparser2.sh
3955 ./backup/GTP/temp1.file
...