画像サイズ(ファイルサイズ)が大きいものを列挙するコマンド(macOS)

あるディレクトリ内の画像を再帰的に検索して、画像サイズ(ファイルサイズ)が大きいものがあったらそれらを列挙して一括圧縮をかけたい時がある。 そんな時のコマンドの備忘録。 find コマンドと awk(オーク)コマンドを使って確認できる。 awk はそれ自体がプログラミング言語の 1 つで、入力を 1 行ずつ受け取りそれらを使って何らかの処理することが可能。

今いるディレクトリ以下を再帰的に検索して、1MB(およそ 1000KB)以上のファイルを列挙したい時

$ find . -type f -size +1000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

# ./dist/images/2018-11-23/xcode.png: 1.2M
# ./dist/images/2018-11-23/iphone.png: 1.5M
# ......

find で ls -lh を実行してファイル情報を再帰的に出力して、 それを awk コマンドに渡して、9 行目のファイル名と 5 行目のファイルサイズを出力する感じっぽい。

$ ls -lh

# 9行目がファイル名、5行目がファイルサイズ、これを出力するあんばい
# -rw-r--r--@    1 naokiotsu  staff   605B  6  1  2019 README.md
# drwxr-xr-x     7 naokiotsu  staff   224B 11 22 19:08 assets
# ......