web-dev-qa-db-ja.com

Unixでサイズのあるファイルを見つける

ファイルをそのサイズで印刷するUnixコマンドを探しています。これを使用しましたが、機能しませんでした。

find . -size +10000k -print.

ファイルのサイズとファイル名/ディレクトリを印刷したい。

51
Kannan Lg
find . -size +10000k -exec ls -sd {} +

findのバージョンが+表記(xargsのように振る舞う)を受け入れない場合は、(GNU findおよびxargsを使用できます。 、したがってfindはおそらく+をサポートします)

find . -size +10000k -print0 | xargs -0 ls -sd

または+\;に置き換える(およびこれの相対的な非効率性と一緒に生きる)か、名前のスペースに起因する問題を抱えてポータブルを使用する可能性があります。

find . -size +10000k -print | xargs ls -sd

lsコマンドの-dは、ディレクトリが見つかった場合(そうではないが...)、ディレクトリ内のファイルではなくディレクトリ情報が印刷されることを保証します。また、1 MB以上のファイルを探している場合(削除済みのコメントが示唆されているように)、+10000k1000kに調整する必要があります。または+1024kまたは+2048(512バイトブロックの場合、-sizeのデフォルト単位)。これにより、サイズとファイル名が一覧表示されます。もちろん、-d-type ffindコマンドに追加することで、必要性を回避できます。

60

Findを使用して、%sをprintfとしてファイルサイズをバイト単位で出力できます。 %h /%fは、それぞれディレクトリプレフィックスとファイル名を出力します。\nは強制的に改行します。

find . -size +10000k -printf "%h/%f,%s\n"

出力

./DOTT/extract/DOTT/TENTACLE.001,11358470
./DOTT/Day Of The Tentacle.nrg,297308316
./DOTT/foo.iso,297001116
9
Adam

GNUが見つかったと仮定します:

find . -size +10000k -printf '%s %f\n'

サイズフィールドの幅を一定にしたい場合は、次のようなことができます。

find . -size +10000k -printf '%10s %f\n'

-size +1000kは少なくとも10,240,000バイトのファイルを選択することに注意してください(kは1000ではなく1024です)。コメントで、1Mより大きいファイルが必要だと言いました。 1024 * 1024バイトの場合、次のようになります。

find . -size +1M ...

正確に 1024 * 1024バイトのファイルのサイズと名前も出力することを除いて、トリックを行います。それが重要な場合は、次を使用できます。

find . -size +1048575c ...

必要な基準を決める必要があります。

6
Keith Thompson