次のようにすると、サイズが20Mbを超えるファイルをすべて見つけることができるという記事を見ました。
find / -type f -size +20000k -exec ls -lh {} \; 2> /dev/null | awk '{ print $NF ": " $5 }' | sort -hrk 2,2
うまくいくようですが、「+20000k」の後に何をしているのかわかりません。
ベストアンサー1
find / -type f -size +20000k -exec ls -lh {} \; 2> /dev/null | awk '{ print $NF ": " $5 }' | sort -hrk 2,2
/
: ホームディレクトリで開始を検索-type f
:一般ファイルのみを探す-size +20000k
:サイズが20000k以上です。-exec ls -lh {} \;
:見つかった各ファイルに対して実行されますls -lh
。つまり、長い形式と人間が読めるサイズ(サフィックス「K」、「M」、「G」などを含む)としてリストされます。2>/dev/null
:find
エラーメッセージが生成されたらブラックホールにリダイレクトします。|
:find
結果を次のコマンドにパイプします(この場合はawk)。awk '{print $NF ": " $5}'
:出力の最後のフィールド、ls -lh
コロン、5番目のフィールドを印刷します。最後のフィールドはファイル名で、5番目のフィールドはファイルサイズ(前述の人が読める形式)です。|
:結果を再パイプします(今回はawk
からからsort
)。sort -hrk 2,2
:2番目のフィールドのみを考慮して、人間が読める数字に基づいて逆順に結果をソートします。
ノート
awk
コマンドを使用せずに、これを簡単かつ迅速に実行できますsort
。
find / -type f -size +20000k -exec ls -Shs {} +
どこ
ls -Shs
:ファイルを一覧表示し、サイズで並べ替えながら、人間が読める形式でサイズを印刷します。{} +
見つかったファイルをfind
リストに追加し、リストls
全体の最後にのみ実行します。各ファイルを{} \;
個別に実行する場合。ls
これら2つのコマンドの唯一の違いは、前者の場合、サイズは第2の列に印刷されるのに対し、後者の場合は第1の列に印刷されることである。ただし、ファイル名またはディレクトリ名にスペースが含まれている場合、出力ls -l
にはファイルごとに異なる数の列があるため、出力はawk
多少ランダムになります。つまりlsの出力を解析しないでください。。