lsコマンドでファイルサイズを元にフィルタして表示させたい
たとえば、現在のディレクトリ内で「ファイルサイズが0バイトのもの以外」をlsコマンドで表示させたくなった場合、lsコマンドのオプションにはサイズでフィルタするようなものがありません。
それでも何とか他のコマンドと併用してでも行いたい場合は、findコマンド等を使って以下のようにして調べることができます。
find . -maxdepth 1 -size +0c|xargs ls -ldh|sed -e "s/.///"
簡単な説明
簡単に説明すると、まずfindコマンドに1階層だけ調べるオプションである「-maxdepth 1」と、サイズが0バイトより大きいものに制限するオプションである「-size +0c」を付けます。
ちなみに「100キロバイト(KB)より多い」を設定したいなら「+100k」、「50バイト(B)より少ない」を設定したいなら「-50c」とします。 キロバイトは「k」、バイトは「c」です。
そしてそれをパイプしてlsコマンドに渡し、リスト形式「-l」、ディレクトリをファイル扱い「-d」、視認しやすく「-h」成形します。
最後にsedコマンドでファイルパスに付いた「./」を削除して完成です。
実行結果サンプル
このコマンドを実行するとこんな感じで表示されます。
find . -maxdepth 1 -size +0c|xargs ls -ldh|sed -e "s/.///" -rw------- 1 apache apache 54 Aug 26 11:34 hoge1.txt -rw------- 1 apache apache 171 Aug 22 07:56 hoge2.txt -rw------- 1 apache apache 289 Aug 20 16:23 hoge3.txt -rw------- 1 apache apache 77 Aug 27 18:14 hoge4.txt -rw------- 1 apache apache 54 Aug 22 01:41 hoge5.txt -rw------- 1 apache apache 64 Aug 25 13:34 hoge6.txt -rw------- 1 apache apache 54 Aug 23 03:34 hoge7.txt
2012-08-27