我正在尝试使用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-V
TAB
答案4
+1 演示了正则表达式替换语法,你每天都会学到新东西!介意我因此研究了它,现在用 ${var//+([[:space:]])/ } 来补充它...