検索出力の ls -lS は出力をソートしません。

検索出力の ls -lS は出力をソートしません。

ご存知のように、ls -Sすべてのファイルはサイズ別に並べ替えて一覧表示されます。

私が望むのは、/usrディレクトリ内のすべてのファイルをサイズでソートして一覧表示することです。だから、次のコマンドを実行しました。

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

ただし、このコマンドはサイズでソートされたすべてのファイルを一覧表示していないようです。-Sここでは動作しません。

答え1

明示的にファイル()の検索を要求し、findファイルが見つかったらその-type fファイルで実行するように要求しました。この問題を解決するために、ls -lSGNU Finder Extensionを使用して複数の一致するファイルを一度に渡すこともできません。同時に渡す+ファイルが多すぎる可能性があるためです。ls

代わりに、GNU findを使用してファイルサイズとファイル名を印刷するように要求し、それらをsortすべてnullで区切ってに渡します。

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

関連情報