1

我有一个 bash 脚本,它通过 crontab 每 10 分钟备份我的源代码。脚本一直工作到八月底。从 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

可能是什么问题呢?

4

2 回答 2

2

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

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

使用date +%d-%m-%yinstead 这会给你04-09-12(注意%d,而不是%e)。


如果您真的想要名称中的空格,则需要引用您的变量,即:

mv lex.tar.gz "lex-$date.tar.gz"
mv "lex-$date.tar.gz" /home/neky/Dropbox/lex/
于 2012-09-04T16:37:17.077 回答
0

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

于 2012-09-04T16:36:45.337 回答