Это потребует некоторой адаптации, если вы захотите использовать это, но утилита dc
включает в себя малоизвестную - и, возможно, очень полезную - возможность работы с произвольными выходными радиусами. Поначалу это выглядит странно.
echo 1024o 1025p 1024p 1023p|dc
0001 0001
0001 0000
1023
Но ее не так уж сложно освоить.
ls -s file;\
ls -hs file;\
echo 1024o 1048576p|dc
1048576 file
1.0G file
0001 0000 0000
... и...
dd bs=1kx1k seek=500 of=file <>/dev/null 2>&0;\
ls -s file;\
ls -hs file;\
echo 1024o 512000p|dc
512000
500M
0500 0000
Я неравнодушен к dc
, но bc
может делать то же самое, просто он не так прост, как я считаю.
В любом случае, dc
не поможет вам справиться со сценарием find ... -printf
- который, я думаю, вам придется сделать -exec
, по крайней мере, чтобы заставить его работать так, как вы хотите, если вы не используете numfmt
, как уже предлагалось. Но если бы вы приспособились к чему-то более гибкому и развернутому, как это, это могло бы быть очень полезным для вас. В любом случае, она, вероятно, может легче выполнять большую часть работы, которую выполняет ваша функция hr
.