ターミナルで、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