我正在创建一个脚本,用于创建名为/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
部分仍然存在。在我的剧本中我做错了什么?
抱歉,可能是一个菜鸟问题,只是开始编写脚本=)
答案 0 :(得分:2)
使用Bash pattern matching可以通过多种方式解决此问题,但我会将replacement expansion与extglob一起使用。例如:
$ 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}')