Find

ls -lS 對 find 的輸出不進行排序

  • March 6, 2018

眾所周知,ls -S將列出所有按大小排序的文件。

我要做的是列出/usr按大小排序的目錄中的所有文件。所以我執行瞭如下命令:

find /usr -type f -exec ls -lS {} \;

但是,這個命令似乎沒有列出按大小排序的所有文件……-S在這裡不起作用。

您已明確要求find搜尋文件 ( -type f),當您找到一個文件時,您已要求它ls -lS在其上執行。您甚至無法使用 GNU 查找副檔名+來解決此問題,以一次傳遞多個匹配文件,因為可能(可能)有太多文件無法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

引用自:https://unix.stackexchange.com/questions/428402