Вот формула, которая имеет соответствующую основу для моей цели - среди прочего она печатает только файлы, используя для размеров степени 1024, 2 ^ 10 -. Размер задействованного файла составляет 1382 байта (1,35 КиБ):

# ls -lh | grep -v '^d' | sed -n '2p' | awk '{print $5, $(NF)}'
1,4K anaconda-ks.cfg

Условия для применения в формуле:

  • вставить '' перед последним символом, принадлежащим первому столбцу вывода;
  • вставьте ' iB ' после последнего символа, принадлежащего первому столбцу вывода;
  • две дробные цифры до ближайшего значения (например, 1,095 = 1,09, 1,096 = 1,10);
  • печать столбцов, связанных с размерами и файлами.

Выход для достижения единожды примененных условий:

# ls -lh | grep -v '^d' | sed <expression> | awk <expression>
1,35 KiB anaconda-ks.cfg

1 ответ1

0

Вы должны избегать парсинга вывода ls. Вместо этого используйте команду stat .

И вместо того, чтобы пытаться создать новый формат чисел, используйте команду numfmt из coreutils.

Таким образом, вы можете использовать это:

for i in *; do 
  printf "%s %s\n" $(stat -c %s "$i" | numfmt --to=iec-i --suffix=B --format "%.2f") "$i"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .