在 du -sk 的 bash 脚本中去除“额外空格”?

在 du -sk 的 bash 脚本中去除“额外空格”?

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

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

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

123456         /folder/path/here

我目前正在使用

dirsize=${dirsize_temp%%/*}

删除“ /folder/path/here”部分,但我无法删除空格。它们似乎实际的空格,因此“ ${dirsize//\ /}”或“ ${dirsize// /}”无法删除它们,但它们仍然阻止我比较两个变量。我是否遗漏了一些转义字符,或者有没有更简单的方法来获取两个文件夹的大小,而无需在末尾添加额外的内容?

答案1

您想使用awk

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

答案2

它通常是一个制表符。(大多数 posix 系统都有 hexdump,或者更简洁的 xxd,它会显示打印的字符)。比 awk 更有效的解决方案是“cut”:

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

答案3

du输出 TAB 字符(ASCII 9)作为分隔符。您可以通过将输出通过管道传输到xxd或来验证这一点od -cx。因此,您需要。您可以在 bash 提示符下或在 ViM 中按然后dirsize=${dirsize_temp/TAB*/}键入文字 TAB 字符。Ctrl-VTAB

答案4

+1 演示了正则表达式替换语法,你每天都会学到新东西!介意我因此研究了它,现在用 ${var//+([[:space:]])/ } 来补充它...

相关内容