3

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

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

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

我也试过:

tar -czf ${imageName}:${date}.tar.gz ${imageBasename} 2>>$ERRORLOG

也没有成功:(

感谢所有的帮助:D

4

3 回答 3

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
$ 

似乎没有任何方法可以逃脱该:角色——但您可以使用该选项来禁止特殊解释--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)

或者你可以使用YYYY-MM-DD_HH_MM_SS,如果你喜欢

$(date +%F-%H_%M_%S)
于 2013-10-16T15:11:31.597 回答
6

Your filenames and variables are incorrect:

${imageName-$date}

Should be

${imageName}${date}

and

${imageName}:${date}.tar.gz

is going to be interpreted as an NFS location because of the : in the name, e.g. server:filename. Replace the : with a - or other non-special character.

于 2013-10-16T14:52:46.537 回答
1

尝试避免 tarfilename 中的所有冒号,因为这将tar尝试输出到远程文件:

 date=$( date +%Y%m%d_%H%M%S )
 tar -czf ${imageName}-${date}.tar.gz ${imageBasename} 2>>${ERRORLOG}
于 2013-10-16T15:17:53.940 回答