![find 输出上的 ls -lS 不会对输出进行排序](https://linux22.com/image/129007/find%20%E8%BE%93%E5%87%BA%E4%B8%8A%E7%9A%84%20ls%20-lS%20%E4%B8%8D%E4%BC%9A%E5%AF%B9%E8%BE%93%E5%87%BA%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F.png)
正如我们所知,ls -S
将列出按大小排序的所有文件。
我想做的是/usr
按大小排序列出目录中的所有文件。所以我执行了如下命令:
find /usr -type f -exec ls -lS {} \;
然而,这个命令似乎并没有列出按大小排序的所有文件......-S
在这里不起作用。
答案1
您已明确要求find
搜索文件 ( ),当您找到一个文件时,您已要求它对其-type f
执行。ls -lS
您甚至无法使用 GNU find 扩展来+
一次传递多个匹配文件来解决此问题,因为可能(很可能)有太多文件需要ls
同时传递。
相反,使用 GNU find,要求它打印文件的大小和文件名,然后将其传递给sort
,全部以空分隔。
find /usr -type f -printf "%s %p\n\0"|sort -zn
示例输出:
0 /usr/lib/python2.7/dist-packages/pkg_resources/_vendor/__init__.py
0 /usr/lib/python2.7/dist-packages/python_debian-0.1.30.egg-info/requires.txt
0 /usr/lib/python2.7/email/mime/__init__.py
... output omitted ...
24013304 /usr/lib/gcc/i686-linux-gnu/6/cc1plus
25675008 /usr/lib/i386-linux-gnu/libicudata.so.57.1
49547156 /usr/lib/i386-linux-gnu/libLLVM-3.9.so.1
答案2
如果您希望输出格式为ls -l
,那么您可以使用
find . -type f -exec ls -l {} \;|sort -n -k5
样本
$ find . -type f -exec ls -l {} \;|sort -n -k5
-rw-rw----+ 1 utsav utsav 0 Mar 6 02:23 ./file5.txt
-rw-rw----+ 1 utsav utsav 12 Mar 6 01:57 ./a.txt
-rw-rw----+ 1 utsav utsav 15 Mar 6 02:10 ./foo.txt
-rw-rw----+ 1 utsav utsav 15 Mar 6 02:11 ./c.txt
-rw-rw----+ 1 utsav utsav 27 Mar 6 01:57 ./b.txt