如何找到给定目录中最大的 10 个文件?

问题描述 投票:0回答:5

如何使用 Perl 或 Bash 在给定目录中找到最大的 10 个文件?

编辑:

  • 我需要这个是递归的。
  • 只想看大文件,不想看大目录
  • 我需要这个才能在 Mac OS X 10.6(find 的版本)上工作。
perl bash filesize
5个回答
6
投票

从当前目录递归打印 10 个最大的文件。

find . -type f -printf "%s %p\n" | sort -nr | awk '{print $2}' | head -10

5
投票
$ alias ducks
alias ducks='du -cs * |sort -rn |head -11'

5
投票

这是在 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];
代替。


1
投票

这个怎么样-

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

0
投票

随着最近的

find
(2023)和
bash

我用

GNU findutils 4.9.0

shopt -s nullglob

print0 () { 
    [ "$#" -eq 0 ] || printf '%s\0' "$@"
}
readarray -td '' files < <(
    print0 * |
    find -files0-from - -type f -printf '%b\t%p\0' |
    sort -rzn |
    cut -zf2 -
) 
printf '%s\n' "${files[@]:0:10}"
  • 这允许所有类型的文件(换行符、空格、特殊字符...)
  • ${files[@]:0:10}
    正在获取 files 数组元素从键 0 到 10
© www.soinside.com 2019 - 2024. All rights reserved.