web-dev-qa-db-ja.com

Unixサーバーでファイルを検索し、サイズで並べ替える

スペースが不足しているWebサーバーがあり、それらで実行している WordPress サイトで問題が発生しています。

大きな.pngファイルがたくさんあることは知っています(それが [〜#〜] png [〜#〜] であるという事実自体は間違いですが、それには入りません)。

サーバー上にあるPNGまたは [〜#〜] jpeg [〜#〜] ファイルのリストを取得し、サイズを小さくして並べ替えたいと思います。 ls -SlahRを使用できることはわかっていますが、並べ替えはフォルダーごとに行われます。

次に、find . -name "*.png" | xargs -i -n1 ls -lah {}を思いつきました。これは、(a)行を並べ替えず、(b)あまり気にしないファイルのアクセス許可と所有権を表示することを除いては問題ありません。

それで、もっと良いものはありますか? [サイズ] [path_to_file]を生成するものはありますか?

6
David Brossard

(GNU)findsortですべてを行うことができ、duは必要ありません。

$ find . -iname '*png' -printf '%s %p\n' | sort -rn
68109 ./7.png
21751 ./2.png
21751 ./1.png
5393 ./6.png
2542 ./5.png
1717 ./4.png
1003 ./3.png
878 ./10.png
793 ./9.png
587 ./8.png
10
terdon

そして、最も互換性のあるバージョンが必要な場合に備えて、通常の検索と並べ替えでそれを行うことができます(printfなどのgnu拡張機能に依存しません):

find . -ls | grep -i -e '\.png$' -e '\.jpe*g' | sort -k7,7nr

-k7,7:列で並べ替え7 to 7(つまり、7のみ)(...これはパラメーターである必要があり、古いシステムで別の列のバイト単位の-ls出力サイズが見つかった場合に列番号を変更できるようにします)

2
Olivier Dulac