Unixサーバーでファイルを見つけてサイズでソート

Unixサーバーでファイルを見つけてサイズでソート

Webサーバーがありますが、スペースが不足して問題が発生します。WordPress私が運営しているウェブサイトです。

私は大きな.pngファイルがたくさんあることを知っています(実際にはパプアニューギニアそれ自体は間違いですが、これについては扱いません。)

PNGリストを取得したいです。JPEGファイルをサーバーに保存し、サイズを小さくしてソートします。使用できることはわかっていますが、ls -SlahRソートはフォルダごとに行われます。

find . -name "*.png" | xargs -i -n1 ls -lah {}次に、(a)行を並べ替えずに(b)私が実際に気にしないファイル権限と所有権を表示することを除いて、どちらが大丈夫かを調べました。

それでは、もっと良いことがありますか? [サイズ] [ファイルパス]を生成する?

答え1

find(GNU)を使用すると、すべての操作を実行でき、sort以下は必要ありません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

答え2

find次のようにdu、およびを組み合わせて使用​​できます。sort

find <directory> -iname "*.png" -type f -print0 | xargs -0 -n1 du -b | sort -n -r

(大文字と小文字を区別しない)で<directory>終わるすべての一般ファイルを検索します。その後、結果は.png各個々のファイルのxargs呼び出しに渡され、duそのサイズをバイト単位で取得し(Due)、結果を数値-bsortソート(-n)し、結果をファイルサイズで降順にソート-r()します。-print0結果を分離して、スペースや改行などの奇妙な文字を含むパスを持つことができます。\0\n

答え3

最も互換性のあるバージョンが必要な場合は、一般的な検索と並べ替えを使用して実行できます(printfなどのGNU拡張には依存しません)。

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

-k7,7:sort the columns 7 to 7(つまり、7 つのみ) (...これは、-ls 出力サイズ (バイト単位) が古いシステムの別の列で見つかった場合にユーザーが列番号を変更できるようにするパラメーターでなければなりません。

関連情報