xバイトより大きい/小さいファイルを見つけるにはどうすればよいですか?


237

ターミナルで、xバイトより大きいまたは小さいファイルを見つけるにはどうすればよいですか?

私は次のようなことができると思います

find . -exec ls -l {} \;

次に、結果をawkにパイプして、ファイルサイズでフィルタリングします。しかし、これよりも簡単な方法はないでしょうか?

回答:


377

つかいます:

find . -type f -size +4096c

4096バイトを超えるファイルを検索します。

そして:

find . -type f -size -4096c

4096バイト未満のファイルを検索します。

サイズの切り替え後の+と-の違いに注意してください。

-sizeスイッチは説明しました:

-size n[cwbkMG]

    File uses n units of space. The following suffixes can be used:

    `b'    for 512-byte blocks (this is the default if no suffix  is
                                used)

    `c'    for bytes

    `w'    for two-byte words

    `k'    for Kilobytes       (units of 1024 bytes)

    `M'    for Megabytes    (units of 1048576 bytes)

    `G'    for Gigabytes (units of 1073741824 bytes)

    The size does not count indirect blocks, but it does count
    blocks in sparse files that are not actually allocated. Bear in
    mind that the `%k' and `%b' format specifiers of -printf handle
    sparse files differently. The `b' suffix always denotes
    512-byte blocks and never 1 Kilobyte blocks, which is different
    to the behaviour of -ls.

11
@Jay:「テスト」セクションの先頭にあるman findから:「数値引数は、nより大きい場合は+ n、nより小さい場合は-n、nのみの場合はnとして指定できます。」
デニスウィリアムソン

4
マニュアルページでは、上に向かって記載されており、+と-の意味を含め、数値( 'n')引数を取るすべてのスイッチに+と-を適用できることを説明しています。(これが記述されているセクションの始まりを見つけるために、manページでTESTSを検索してください)
Slartibartfast

1
@Dennis Williamson:奇妙な+と-はOS Xで動作しますが、manページにはTESTSセクションがありません。実際、リンクと比較して大きなチャンクが欠落しており、特にテスト、アクション、演算子が欠落しています。
天井猫

1
GNUバージョンのmanページには「Tests」セクションがありますが、BSDバージョンにはありません。linuxmanpages.com/man1/find.1.php
ジェイ

8
BSDのマニュアルページで+/-について説明されていることがわかりました。「プライマリ」セクションの終わりにその方法。-数値引数を取るすべてのプライマリーでは、数値の前にプラス記号(「+」​​)またはマイナス記号(「-」)を付けることができます。前のプラス記号は、先行するマイナス記号は「ちょうどn」「nより少ない」とどちらの手段を意味し、「n個以上」を意味する
ジェイ・

7

findAWKにパイプすることなく、単独で役立つと思います。例えば、

find ~ -type f -size +2k  -exec ls -sh {} \;

チルダは、検索を開始する場所を示し、結果には2キロバイトを超えるファイルのみが表示されます。

おしゃれにするには、-execオプションを使用して別のコマンドを実行し、これらのディレクトリのサイズを一覧表示します。

詳細については、のmanページをご覧くださいfind


4

AWKは、この種のものにとっては本当に簡単です。あなたが尋ねたように、ファイルサイズのチェックに関連してあなたがそれでできることがいくつかあります:

200バイトを超えるファイルを一覧表示する:

ls -l | awk '{if ($5 > 200) print $8}'

200バイト未満のファイルをリストし、リストをファイルに書き込みます。

ls -l | awk '{if ($5 < 200) print $8}' | tee -a filelog

0バイトのファイルをリストし、リストをファイルに記録し、空のファイルを削除します。

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm


(または)のteeような、ファイルへのパイピングとファイルへのリダイレクトの違いは何ですか?ls -l > filelogls -l >> filelog
-OmarOthman

3

2000バイトを超える:

du -a . | awk '$1*512 > 2000 {print $2}'

2000バイト未満:

du -a . | awk '$1*512 < 2000 {print $2} '

duはディスク上のスペースを占有するため、これは悪いことです。これはファイルサイズと同じではありません。たとえば、圧縮ファイルシステム(btrfs / zfs)がある場合、duは実際の圧縮解除サイズを示すlsとは異なる結果を返します。
クリススコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.