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