如何找到文件夹中最大的n个文件?

Pau*_*ran 7 command-line files disk-usage

如何在文件夹中找到除第一个文件夹中的文件之外的 n 个最大文件?

在这个例子中,对于n=2

dir
--file 50KB
--dir1
--dir2
----file2_1.txt (size 25KB)
--dir3
----dir3_1
------file3_1.txt (size 35KB)
------file3_2 (size 25KB)
Run Code Online (Sandbox Code Playgroud)

结果:

dir/dir3/dir3_1/file3_1.txt 35KB
dir/dir2/file2_1.txt 25KB
Run Code Online (Sandbox Code Playgroud)

gle*_*man 6

find . -mindepth 2 -printf "%s\t%p\n" | sort -n | cut -f 2- | tail -n $n
Run Code Online (Sandbox Code Playgroud)

在这里,最大的文件在最后。如果你想改变顺序,那么最大的文件是第一个:

find . -mindepth 2 -printf "%s\t%p\n" | sort -nr | cut -f 2- | head -n $n
# .............................................^...............^^^^
Run Code Online (Sandbox Code Playgroud)

使用 GNU 工具集,您可以处理包含换行符的文件名(烦人但有效):

find . -mindepth 2 -printf "%s\t%p\n" | sort -n | cut -f 2- | tail -n $n
Run Code Online (Sandbox Code Playgroud)

要获得所需的输出,您可以执行以下操作:

find . -mindepth 2 -printf "%s\t%p\n" | sort -nr | cut -f 2- | head -n $n
# .............................................^...............^^^^
Run Code Online (Sandbox Code Playgroud)

使用CPAN 中的perl 模块Number::Bytes::Human


ste*_*ver 5

尽管您标记了您的问题bash,但这里有一个zsh解决方案,以防其他人发现它有用。

给定的

% tree -h dir
dir
??? [ 512]  dir1
??? [ 512]  dir2
?   ??? [ 25K]  file2_1.txt
??? [ 512]  dir3
?   ??? [ 512]  dir3_1
?       ??? [ 35K]  file3_1.txt
?       ??? [ 25K]  file3_2.txt
??? [ 50K]  file

4 directories, 4 files
Run Code Online (Sandbox Code Playgroud)

然后使用zsh水珠预选赛

% print -RC1 dir/*/**/*(.OLon[1,2])
dir/dir3/dir3_1/file3_1.txt
dir/dir2/file2_1.txt
Run Code Online (Sandbox Code Playgroud)

在哪里

  • dir/*/确保我们在下面至少启动 1 个目录dir,相当于find's-mindepth

  • **/*是一个递归匹配的shell glob(bash如果globstar设置了该选项,则相同)

  • () 包含一组限定符,特别是

    • .仅匹配常规文件(相当于find -type f
    • OL按大小顺序的结果(大号ength)下降,而on通过休息关系ñ AME上升
    • [1,2] 选择一系列结果

与 不同find,shell globs 通常默认省略隐藏文件 - 如果您想包含它们,请添加D到限定符即(.DOLon[1,2])