lsを使用して空でないファイルのみをリストするにはどうすればよいですか?


回答:


49

find dirname -not -empty -lsGNU findを想定してを使用します。


1
誰が下票を説明したいですか?
デニーズ

アスカーはを求めおそらくのでls、あなたが使用find;)私も引き上げた...それは適切なソリューションです
BloodPhilia

2
"find。-not -empty -ls"を使用する場合、現在のディレクトリ(つまり、出力に "。")も含まれます。現在のファイルを含めるには、 "find。-type f -not -empty -ls"を使用します。
user672009

19

これは、lsが十分に強力ではないこと発見するための仕事です。

find -maxdepth 1 -size +0 -print

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

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

-print 見つけたファイルへのフルパスを印刷するようにfindに指示します

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


1
警告を避けるために-maxdepth 1前に置くべき-size +0です。また、-printデフォルトのアクションであるので、それは必要ありません。
cYrus

@cYrus-私に警告はありません(cygwin)
ニフル

find有効なオプションとは何であるかという点で、実装は大きく異なります。GNU find(これは非常に一般的です)の前に置くと、警告生成されます。-size-maxdepth
テレマコス


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

あなたが使用するつもりであるなら、あなたはls少し助けを必要としますawk


7

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


3
 $ find /* -type f ! -size 0

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


1

Bash 4.0以降

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.