unix – x バイトよりも大きい/小さいファイルを見つけるには?

find unix

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

みたいなことができるんだろうな

find . -exec ls -l {} \;

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

  262  ceiling cat  2010-10-28


ベストアンサー

Use:

find . -type f -size +4096c

を使用して、4096バイトよりも大きなファイルを見つけることができます

And :

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.

411  John T  2010-10-28


findはAWKに配管せずに単体でも使えそうな気がします。例えば

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

チルダは検索を開始する場所を示し、結果は2キロバイト以上のファイルのみを表示します

これをよりおしゃれにするために、-execオプションを使って、これらのディレクトリのサイズを一覧表示する別のコマンドを実行することができます

詳細については、man page for findをご覧ください

10  Siobhan  2015-10-25


AWKはこの手のことを考えると本当に簡単です。ご質問のように、ファイルサイズのチェックに関連して、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

6  MaQleod  2010-10-29


2000バイトより大きい

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

2000バイト未満

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

3  Jay  2010-10-28


タイトルとURLをコピーしました