2013-09-27 2 views
2

Я использую команду, чтобы получить размер удаленной папки после его запуска он возвращаетKB М.Б. с помощью Баша

120928312 http://blah.com 

число является размером в КБ, что я хотел бы сделать, это иметь его выход в MB и удаленная часть http, я угадываю greping для файла, но не знаю, как это сделать.

ответ

3

как об этой линии:

kent$ echo "120928312 http://blah.com"|awk '{$1/=1024;printf "%.2fMB\n",$1}' 
118094.05MB 
5

Попробуйте сделать это с помощью встроенных команд (отобразить целое, как в версии КБ)

var="120928312 http://blah.com" 
echo "$((${var%% *}/1024)) MB" 
+1

не забывают, что оболочка использует целочисленную математику, так что (Х + 512)/1024, чтобы получить правильное округление ... Я проигнорировал эту часть в своем ответе слишком – technosaurus

7

Вы можете сделать это с встроенными командами оболочки

some_command |while read KB dummy;do echo $((KB/1024))Mb;done 

Вот более полезная версия:

#!/bin/sh 
human_print(){ 
while read B dummy; do 
    [ $B -lt 1024 ] && echo ${B} bytes && break 
    KB=$(((B+512)/1024)) 
    [ $KB -lt 1024 ] && echo ${KB} kilobytes && break 
    MB=$(((KB+512)/1024)) 
    [ $MB -lt 1024 ] && echo ${MB} megabytes && break 
    GB=$(((MB+512)/1024)) 
    [ $GB -lt 1024 ] && echo ${GB} gigabytes && break 
    echo $(((GB+512)/1024)) terabytes 
done 
} 

echo 120928312 http://blah.com | human_print 
+0

попробовал это, но он выводит 118099Mb – Lurch

+0

@Lurch Если вы не хотите, чтобы Mb просто удалял его из команды – technosaurus

+0

, то я имел в виду, Неправильное вычисление, вывод some_command равен 121013231, который находится в KB, когда я делаю some_command your_command, я получаю 118176Mb, что неправильно. – Lurch

1

Попробуйте использовать awk

awk '{MB=$1/1024; print $MB}' 

$1 - значение первого столбца, размер (KB) в этом случае

1
function bytes_for_humans { 
    local -i bytes=$1; 
    if [[ $bytes -lt 1048576 ]]; then 
     echo "$(((bytes + 1023)/1024))KiB" 
    else 
     echo "$(((bytes + 1048575)/1048576))MiB" 
    fi 
} 

$ bytes_for_humans 1 
1KiB 
$ bytes_for_humans 1024 
1KiB 
$ bytes_for_humans 16777216 
16MiB 
Смежные вопросы