ターミナルで、x バイトより大きいまたは小さいファイルを見つけるにはどうすればよいでしょうか?
こんな感じでできると思います
find . -exec ls -l {} \;
そして結果をパイプでawk
ファイルサイズでフィルタリングします。しかし、これよりも簡単な方法があるのではないでしょうか?
答え1
使用:
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.
答え2
AWKにパイプしなくても単独で使えると思いfind
ます。例えば、
find ~ -type f -size +2k -exec ls -sh {} \;
チルダは検索を開始する場所を示し、結果には 2 キロバイトを超えるファイルのみが表示されます。
さらに高度な機能として、-exec
これらのディレクトリとそのサイズを一覧表示する別のコマンドを実行するオプションを使用できます。
詳細については、マニュアルページfind
。
答え3
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