bash不将当前日期添加到文件名

时间:2012-09-04 16:32:00

标签: bash scripting

我有一个bash脚本,可以通过crontab在10分钟内备份我的源代码。脚本工作到8月底。它从9月1日起不起作用。这是脚本:

#!/bin/sh
date=`date +%e-%m-%y`
cd /home/neky/python
tar -zcf lex.tar.gz lex/
echo $date

mv lex.tar.gz lex-$date.tar.gz
mv lex-$date.tar.gz /home/neky/Dropbox/lex/lex-$date.tar.gz

如果我手动执行,则会打印当前日期4-09-12,此错误mv: target ‘4-09-12.tar.gz’ is not a directory

可能是什么问题?

2 个答案:

答案 0 :(得分:2)

当月份的日期是一位数时,您的date包含一个空格(这也解释了为什么它只在新月停止工作)。这导致你的命令被分开,即

# this is what it you end up with
mv lex.tar.gz lex- 4-09-12.tar.gz

使用date +%d-%m-%y代替04-09-12(注意%d代替%e)。


如果你真的想在名字中留一个空格,你需要引用你的变量,即:

mv lex.tar.gz "lex-$date.tar.gz"
mv "lex-$date.tar.gz" /home/neky/Dropbox/lex/

答案 1 :(得分:0)

字符%(日期格式的一部分)是cron脚本中的特殊字符,因此您需要将其转义。