如何在一个文件夹中找到除第一个文件夹中的文件外的 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)
结果:
dir/dir3/dir3_1/file3_1.txt 35KB
dir/dir2/file2_1.txt 25KB
如何在一个文件夹中找到除第一个文件夹中的文件外的 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)
结果:
dir/dir3/dir3_1/file3_1.txt 35KB
dir/dir2/file2_1.txt 25KB
在这里,最大的文件在最后。如果要更改顺序,则最大的文件在前:
使用 GNU 工具集,您可以处理包含换行符的文件名(烦人但有效):
要获得所需的输出,您可以执行以下操作:
使用来自 CPAN 的perl 模块Number::Bytes::Human 。
尽管您标记了您的问题
bash
,但这里有一个zsh
解决方案,以防其他人发现它有用。给定
然后使用
zsh
glob限定符:在哪里
dir/*/
确保我们至少在下面启动 1 个目录dir
,相当于find
's-mindepth
**/*
是一个递归匹配的 shell glob(bash
如果globstar
设置了选项,则相同)()
包含一组限定符,特别是.
仅匹配常规文件(相当于find -type f
)OL
按大小 ( L长度) 降序排列结果,而按名称升序on
打破平局[1,2]
选择一系列结果与 不同
find
的是,shell glob 默认情况下通常会忽略隐藏文件 - 如果要包含它们,请添加D
到限定符中,即(.DOLon[1,2])
从我的头顶:
谁更短?顺便说一下——在拉尔森的版本中——只使用了 cur 目录……不算数。
无论如何,如果你想限制级别,你可以通过
find -maxdepth
例如
如果要排除第一级,则可以使用
mindepth 2
,maxdepth whatever
...