使用日期命名tar文件

ran*_*anu 2 linux shell date tar

我想用日期命名一个tar文件,但我尝试的是不起作用,请参阅下面的代码以获得更好的解释,以及ai必须做什么?

date=$( date +%Y-%m-%d_%H:%M:%S )
tar -czf ${imageName-$date}.tar.gz ${imageBasename} 2>>$ERRORLOG
Run Code Online (Sandbox Code Playgroud)

图像名称是存储图像名称的变量,如: win-ser-rdp

我也试过了:

tar -czf ${imageName}:${date}.tar.gz ${imageBasename} 2>>$ERRORLOG
Run Code Online (Sandbox Code Playgroud)

也没有工作:(

感谢所有的帮助:D

Kei*_*son 14

问题出:在文件名中,由GNU tar专门处理.

在我自己的系统上,我有一个名为的目录foo,我得到这个:

$ tar zcf foo:42.tar.gz foo
tar (child): Cannot connect to foo: resolve failed
tar: Child returned status 128
tar: Error is not recoverable: exiting now
$ 
Run Code Online (Sandbox Code Playgroud)

似乎没有任何方法可以逃避:角色 - 但你可以通过--force-local选项禁止特殊解释(感谢Daniel Serodio指出这一点).

文件名中的冒号字符,虽然它们是合法的,但无论如何通常都是个坏主意.例如,您可能无法通过访问该文件scp.

这是GNU tar手册中的相关部分(info tar转到6.1节):

要在连接到远程计算机的设备上指定存档文件,请使用以下命令:

--file=hostname:/dev/file-name

如果可能,tar将设置远程连接,并提示您输入用户名和密码.如果您使用--file=@hostname:/dev/file-name,tar将尝试使用您的用户名作为远程计算机上的用户名来设置远程连接.

当我创建包含时间戳的文件名时,我通常会使用 YYYY-MM-DD-HHMMSS

$(date +%F-%H%M%S)
Run Code Online (Sandbox Code Playgroud)

或者YYYY-MM-DD_HH_MM_SS如果你愿意,你可以使用

$(date +%F-%H_%M_%S)
Run Code Online (Sandbox Code Playgroud)

  • 从GNU tar手册:_You can如果您需要使用名称中包含冒号的文件,则可以使用'--force-local'选项禁止远程磁带机行为._ (4认同)

Mar*_*c B 6

您的文件名和变量不正确:

${imageName-$date}
Run Code Online (Sandbox Code Playgroud)

应该

${imageName}${date}
Run Code Online (Sandbox Code Playgroud)

${imageName}:${date}.tar.gz
Run Code Online (Sandbox Code Playgroud)

将被解释为NFS位置,因为:在名称中,例如server:filename.替换为:a -或其他非特殊字符.

  • @RafaelNunes只要你的脚本中有一个冒号(`:`),那么你就*使用"这个脚本的互联网",这只是因为这是告诉`tar`你想要访问远程资源的方法.既然`$ {date}`也包含冒号,这就是你遇到麻烦的地方...... (2认同)