如何删除空格后的每个字符?

时间:2013-08-22 20:54:23

标签: linux bash unix scripting

我正在创建一个脚本,用于创建名为/home/的{​​{1}}目录的备份。备份完成后,我希望脚本以兆字节为单位吐出备份大小。以下是我遇到问题的问题:

backup.sh

这是我一直得到的输出:

# creates an approximate size of the file + the file location
backup_text=$(du $new_backup)
# take off the file name at the end and add an 'M' to specify Megabytes
backup_text=${backup_text%[:blank:]*}M 
# print string to console
echo $backup_text

如您所见,备份大小为20M,这是正确的,但20 /backups/Thu_Aug_22_15:52M 部分仍然存在。在我的剧本中我做错了什么?

抱歉,可能是一个菜鸟问题,只是开始编写脚本=)

3 个答案:

答案 0 :(得分:2)

替换模式扩展

使用Bash pattern matching可以通过多种方式解决此问题,但我会将replacement expansionextglob一起使用。例如:

$ shopt -u extglob
$ backup_text='foo bar'
$ echo ${backup_text/+([[:blank:]])*/}
foo

答案 1 :(得分:1)

加倍角色类的大括号:

backup_text=${backup_text%[[:blank:]]*}M 

整个括号表达式([:blank:])在字符类([...])中计为单个“字符”(标记),因此您需要两者的括号。

答案 2 :(得分:1)

使用-h选项以漂亮的格式获取大小,而不是添加“M”

此外,您不需要任何魔法来删除文件名。得到第一个字!

不要忘记"$new_backup"周围的引号。 非常非常重要,因为如果您的$new_backup包含空格,事情就会变得非常重要。

sizeStr=$(du -h "$new_backup" | awk '{print $1}')