web-dev-qa-db-ja.com

lsを使用して空でないファイルのみを一覧表示するにはどうすればよいですか?

Linuxを使用して空ではない(サイズ> 0)すべてのファイルを(lsを使用して)リストするにはどうすればよいですか?

38
David B

GNU findと仮定して、find dirname -not -empty -lsを使用します。

49
Daenyth

これは find の仕事ですlsは十分に強力ではありません。

find -maxdepth 1 -size +0 -print

-maxdepth 1-これは、現在のディレクトリのみを検索するようにfindに指示し、すべてのサブディレクトリを検索するように削除するか、数値を2、3、またはそれ以上のレベルに変更します。

-size +0これは、0バイトより大きいサイズのファイルを探すようにfindに指示します。 0は、任意のサイズに変更できます。

-printは、見つかったファイルへのフルパスを出力するようにfindに指示します

編集:
追加の追加:おそらく上記の-type fスイッチも追加する必要があります。これにより、findはファイルのみを検索します。また、以下のコメントに記載されているように、-printスイッチは実際には必要ありません。

20
Nifle

find dirname -type f ! -empty

10
Joril
ls -l | awk '{if ($5 != 0) print $9}'

lsを使用したい場合は、awkからの少しの支援が必要です。

9
MaQleod

Lsにはファイルをフィルタリングするオプションがほとんどありません。それはその仕事ではありません。ファイルのフィルタリングは、(グロビングを介した)単純なケースのシェルの仕事であり、複雑なケースの検索の仕事です。

Zshでは、Lグロビング修飾子を使用して、サイズが> 0のファイル(.修飾子は通常のファイルに制限されます):

ls *(.L+0)

他のシェルのユーザーは、findを使用する必要があります。 GNU find(主にLinuxで見つかる)で):

find -maxdepth 1 -type f ! -empty -exec ls {} +

POSIX準拠の方法は次のとおりです。

find . -type f -size +0c -exec ls {} + -o -name . -o -Prune

lsが単なる例ではなく、単に目視するだけの場合は、サイズで並べ替えることができます:ls -S

 $ find /* -type f ! -size 0

ディレクトリだけでなく、空でないすべてのファイルが必要な場合は、より適切に機能します。

3
Trezoid

Bash 4.0以降

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
1
user31894