web-dev-qa-db-ja.com

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

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

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

find . -exec ls -l {} \;

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

225
ceiling cat

つかいます:

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.
357
John T

私はfindがAWKにパイプを通さずに単独で役に立つかもしれないと思います。例えば、

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

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

見栄えを良くするために、-execオプションを使用して、これらのディレクトリをサイズとともに一覧表示するという別のコマンドを実行できます。

詳細は、 findのマニュアルページ を参照してください。

6
Siobhan

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
4
MaQleod

2000バイト以上

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

2000バイト未満

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