0

我有这样的功能...

 function size {

      export FILENAME=$1

      export SIZE=$(du -sb $FILENAME | awk '{ print $1 }')

      awk 'BEGIN{x = ENVIRON["SIZE"]
                 split("Byte KiloByte MegaByte GigaByte TeraByte PetaByte ExaByte ZettaByte YottaByte", type)
                 for(i=8; y < 1; i--)
                     y = x / (2**(10*i))
                     print y " " type[i+2]
      }'

 }

大小 "/home/foo.bar" # 1 兆字节

如何插入:打印 y " " type[i+2]

到变量: SIZE_FILE ?

测试:SIZE_FILE=${print y " " type[i+2]} # 错误 :-(

非常感谢你

4

2 回答 2

2

$( expr ) 构造将评估“expr”的结果保存到一个变量中:

 theDate=$(date)

您也可以使用反引号,但我认为 $()​​ 更具可读性:

   theDate=`date`

因此,对于您的脚本,您将使用:

    function size {

          export FILENAME=$1

          SIZE=$(du -sb $FILENAME | awk '{ print $1 }')

          export FILE_SIZE=$(awk -v x=$SIZE 'BEGIN{
                     split("Byte KiloByte MegaByte GigaByte TeraByte PetaByte ExaByte ZettaByte YottaByte", type)
                     for(i=8; y < 1; i--)
                         y = x / (2**(10*i))
                         print y " " type[i+2]
          }')

    echo $FILE_SIZE

 }
于 2012-08-21T19:36:23.243 回答
0

您可以在没有 的情况下执行此操作awk,它更适合处理文本文件。

function size () {

    # Non-environment variables should be lowercased
    # Always quote parameter expansions, in case they contain spaces
    local filename="$1"

    # Simpler way to get the file size in bytes
    local size=$(stat -c%s "$filename")

    # You could put all the units in an array, but we'll keep it simple.
    for unit in Byte KiloByte MegaByte GigaByte TeraByte PetaByte ExaByte ZettaByte YottaByte; do
        echo "$size $unit"
        (( size /= 1024 ))
    done

}

sizes=$( size $myfile )
于 2012-08-21T20:08:45.700 回答