2010-09-25 117 views
1

我的服务器正在使用CentOS 5.5(几乎是Red Hat Linux)。在命令中使用shell变量

我想将一组图片备份到带时间戳的文件中。 此代码将工作:


z_cmd1=$(tar cvzf /home/user1/public_ftp/misc/pics_20100925_142230.tar.gz /home/user1/public_html/misc/_pics_var/F???????.jpg) 
echo "tar output =[${z_cmd1}]" 

,但我当然希望时间戳是自动的。

以下代码不起作用。不知何故,第三行(带有焦油的行)失败。 'tar'会执行某些操作,但它不会在预期的目标文件夹中创建任何文件。为什么?


z_fname=$(date +"/home/user1/public_ftp/misc/pics_%Y%m%d_%H%M%S.tar.gz") 
echo "File name =[${z_fname}]" 
z_cmd1=$(tar cvzf ${z_fname} /home/user1/public_html/misc/_pics_var/F???????.jpg) 
echo "tar output =[${z_cmd1}]" 

谢谢。

+0

你已经设置了'v' erbose标志,它说什么? 'set -xv'通常对调试shell脚本很有帮助。 – msw 2010-09-25 12:52:18

+0

你说'tar'做了些什么。它有什么作用?你得到什么错误信息?回显'$ {z_cmd1}'时输出什么内容?尽管在这种情况下似乎并不需要,但引用包含文件名的变量是个好主意。 – 2010-09-25 14:56:27

+0

对我来说代码'工作' - 输出文件的名字是振振有词地生成的,然后'tar'失败了,因为我的机器上没有'/ home'目录,更别说它下面的目录了。为什么你要捕获'tar'的输出呢?为什么不让它运行?你也可能想要捕捉错误。 – 2010-09-25 16:38:23

回答

1

试试这个是这样的:

mydate=`date +"%m-%d-%Y"`; 
input="/home/user1/public_html/misc/_pics_var/F???????.jpg"; 
output="/home/user1/public_ftp/misc/pics_$mydate.tar.gz"; 
tar cvzf $output $input && echo "$output created succesfully!"; 
if [ ! $? == 0 ]; then echo "$output failed"; fi; 

我们创建一个日期变量。 我们使用输出变量中的日期变量创建输入和输出变量。 然后执行命令并检查它是否执行没有错误。

+0

'tar'命令周围的反引号不应该在那里。 – 2010-09-25 14:47:51

+0

你说得对,我纠正了它。 – CodeReaper 2010-09-25 16:06:36