为了bash脚本在du-sk上剥离“额外空间”?

我正在尝试使用du -sk来获取两个文件夹的大小

 dirsize_temp=`du -sk /folder/path/here` 

然后用一个if语句来比较大小。 唯一的问题是,当你运行命令时,它会返回类似的东西

 123456 /folder/path/here 

我目前正在使用

 dirsize=${dirsize_temp%%/*} 

去除“ /folder/path/here ”部分,但我有问题摆脱空间。 他们似乎并不是实际的空间,所以“ ${dirsize//\ /} ”或“ ${dirsize// /} ”无法将其删除,但仍然使我无法比较两个variables。 有没有一些转义字符,我缺less,或更容易的方法来获得两个文件夹的大小没有额外的东西钉在最后?

你想用awk

 dirsize=`du -sk /folder/path/here | awk '{print $1}'` 

这通常是一个选项卡。 (打大多数posix系统有hexdump,或更简单的命名xxd这将显示您打印的字符)。 比awk更有效的解决scheme是'cut':

  dirsize=`du -sk /folder/path/here | cut -f1` 

du输出一个TAB字符(ASCII 9)作为分隔符。 您可以通过将输出pipe道输送到xxdod -cx来validation。 因此,您需要dirsize=${dirsize_temp/TAB*/} 。 您可以在bash提示符下键入一个文字的TAB字符,也可以按下Ctrl-V TAB在ViM中键入。

+1来演示这个正则expression式replace语法,你每天都会学到新的东西! 请记住,如果我研究它,现在用$ {var // +([[:space:]])/}