2012-02-05 23 views
2

我试图tar一个大目录,我想输出文件包含日期。这是迄今为止我所拥有的。如何在Bash中连接两个字符串而不使用变量?

tar -zcvf "mywebsite website backup" $(date "+%Y-%m-%d %T") public_html 

虽然这并不完美。作为一个例子,我试图让下面的单个字符串成为文件名。迄今为止的调用工作正常,我不需要帮助,但我不知道如何将“我的网站备份”与日期输出连接在一起,而无需先将它们存储在变量中(这看起来很火。

mywebsite website backup 2001-12-01 12:04:03 

回答

4

变量和如双引号内解释(而不是单引号):

tar -zcvf "mywebsite website backup $(date '+%Y-%m-%d %T').tgz" public_html 

(我加了.tgz后缀,你显然忘了。)

如果你有没有你的文件名中有空格,你可以不用引号:

tar -zcvf foo_backup_$(date '+%Y-%m-%d_%T').tgz foo/ 

或者你可以把它周围,并使用date已经接受格式字符串的事实:(尚需各地$()双引号如果文件名包含空格)

tar -zcvf $(date +'foo_backup_%Y-%m-%d_%T.tgz') foo/ 

注:由于种种在文件名中包含冒号通常不是一个好主意。

+0

我想你列出的命令,并将其抛出此错误。只是说明这并不清楚$(date)是对date命令的调用,而不是一个变量。 tar(child):无法连接到mywebsite网站备份2012-02-05 09:解决失败 – Jazzepi 2012-02-05 14:38:55

+1

@Jazzepi:冒号可能会给您的设置带来问题(似乎被解释为网络路径)。使用另一种时间格式。这与你的原始问题无关。 – hop 2012-02-05 14:40:29

+0

是的,这似乎是问题所在。我没有意识到你可以在字符串文字中进行$()调用。 – Jazzepi 2012-02-05 14:43:18

1

您也可以尝试语法:

tar -zcvf "mywebsite website backup `date \"+%Y-%m-%d %T\"`.tgz" public_html 
+2

反引号不赞成使用'$()'。对格式字符串使用单引号会使转义不必要。 – hop 2012-02-05 14:49:00

相关问题