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)
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。
尽管您标记了您的问题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])