Насколько я знаю, программа stat
сама по себе не может отображать читабельные размеры. Но вы всегда можете передать его другой программе, например, numfmt
:
stat -c %s /path/to/file | numfmt --to=iec
Применительно к вашему примеру это будет:
filelist=$(ls -p | grep -v/)
filesize=$(
stat -c "%s %n" $filelist | sort -nr -k1 | while read filesize filename; do
printf '%s : %s\n' "$(numfmt --to=iec <<< $filesize)" "$filename"
done
)
Обратите внимание, что я добавил опция -k1
при вызове sort
, потому что я предполагаю, что вы хотите отсортировать, используя размер, а не имя.
numfmt
имеет то преимущество, что вы можете выбрать способ отображения удобочитаемого размера. , Я предложил --to=iec
, потому что это наиболее распространенный типоразмер файлов, но вы можете использовать другие преобразования. Пожалуйста, обратитесь к справочной странице numfmt .
В качестве последнего замечания я бы посоветовал вам не сохранять файлы непосредственно из захвата $()
, поскольку он не будет работать, если имя файла содержит космический персонаж. Вы можете использовать find
, чтобы вывести список файлов и получить размер одновременно, например:
find . -mindepth 1 -maxdepth 1 -not -type d -printf '%s %f\n' |
sort -nr -k1 |
while read filesize filename
do
printf '%s : %s\n' "$(numfmt --to=iec <<< $filesize)" "$filename"
done