2012-09-04 42 views
1

我有一個bash腳本,它通過crontab在10分鐘的基礎上備份我的源代碼。腳本一直工作到八月底。從9月1日起它不工作。這是腳本:bash不將當前日期添加到文件名

#!/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

$日期擁有領先的空間,如果你這樣做'顯示lex- $日期.tar.gz'你會看到'lex- 4-09-12.tar.gz' – artapet

回答

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/ 
0

字符%(日期格式的一部分)是cron腳本中的一個特殊字符,因此您需要將其轉義。

+0

好吧,我看到腳本不在你的crontab中,你只需從crontab中調用它。在這種情況下,你顯然不需要引用'%' – piokuc