0

我正在制作一个脚本来创建我的/home/目录的备份,名为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

这是我不断得到的输出:

20 /backups/Thu_Aug_22_15:52M

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

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

4

3 回答 3

2

替换模式扩展

有很多方法可以用Bash 模式匹配来处理这个问题,但我会使用extglob替换扩展。例如:

$ shopt -u extglob
$ backup_text='foo bar'
$ echo ${backup_text/+([[:blank:]])*/}
foo
于 2013-08-22T21:04:48.710 回答
1

将您的角色类上的大括号加倍:

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

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

于 2013-08-22T21:05:59.393 回答
1

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

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

并且不要忘记周围的引号"$new_backup"。这非常$new_backup重要,因为如果你包含一个空间,事情就会变得疯狂。

sizeStr=$(du -h "$new_backup" | awk '{print $1}')
于 2013-08-22T21:44:00.507 回答