![在 Unix 服务器上查找文件并按大小排序](https://linux22.com/image/56549/%E5%9C%A8%20Unix%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%9F%A5%E6%89%BE%E6%96%87%E4%BB%B6%E5%B9%B6%E6%8C%89%E5%A4%A7%E5%B0%8F%E6%8E%92%E5%BA%8F.png)
答案1
find
你可以用 (GNU)和来完成整个事情sort
,不需要du
:
$ find . -iname '*png' -printf '%s %p\n' | sort -rn
68109 ./7.png
21751 ./2.png
21751 ./1.png
5393 ./6.png
2542 ./5.png
1717 ./4.png
1003 ./3.png
878 ./10.png
793 ./9.png
587 ./8.png
答案2
find
您可以使用,du
和的组合,sort
如下所示:
find <directory> -iname "*.png" -type f -print0 | xargs -0 -n1 du -b | sort -n -r
这将搜索所有以(不区分大小写)<directory>
结尾的常规文件。.png
然后将结果传递给对每个单个文件xargs
进行调用du
,获取其大小(以字节为单位)(由于-b
)并传递给sort
,后者对结果进行数字排序(-n
,后者按文件大小降序-r
( )。使用代替 来-print0
分隔结果,因此您可以拥有包含奇怪字符(例如空格和换行符)的路径。\0
\n
答案3
如果您需要最兼容的版本,您可以使用常规查找和排序来完成(不依赖 gnu 扩展,例如 printf):
find . -ls | grep -i -e '\.png$' -e '\.jpe*g' | sort -k7,7nr
-k7,7
:对列进行排序7 to 7
(即,只有 7)(...这应该是一个参数,允许用户更改列号,以防在旧系统上 find -ls 输出大小(以字节为单位)在不同的列上)