Linux mv命令,时间添加空格

时间:2016-02-04 06:59:38

标签: linux bash scp mv

这是我的bash脚本,用于将csv文件复制到新文件中,该文件将时间戳添加到结尾,然后将其复制到另一台服务器。

#!/bin/bash
timestamp=`date +"%Y%m%d%H%M%S"`
ssh root@172.16.1.125 mv /var/log/asterisk/cdr-csv/Master.csv /var/log/asterisk/cdr-csv/Master.csv.$timestamp
scp root@172.16.1.125:/var/log/asterisk/cdr-csv/Master.csv.$timestamp /opt/logs/asterisk/Master.csv.$timestamp

然而,这会在文件末尾添加两个空格。例如:

原始文件:test.csv
MV文件:test.csv.20160204083042(space)(space)

然后当scp尝试找到文件时,由于末尾的空格而无法归档。我放弃了,因为我尝试了所有的变化。

2 个答案:

答案 0 :(得分:0)

每一步检查脚本。你所描述的不应该发生:

$ date +"%Y%m%d%H%M%S" | xxd
0000000: 3230 3136 3032 3034 3138 3034 3438 0a    20160204180448

输出中有换行符,但在分配给变量时它会消失,因此$timestamp将是干净的。

变量中的任何空格也会在ssh / scp的行中消失,因为你的文件没有被引用 - 即使末尾有空格,它也会在解析命令时被删除。

要确保,您可以管道输出,或者将变量回显到xxd,就像在此示例中一样。如果它们确实发生,你实际上会看到这些空间。

或者发布整个脚本(我假设这是一个编辑版本)

答案 1 :(得分:0)

感谢。似乎编码不正确,行结尾未设置为unix。我在Windows机器上开发并部署到服务器上,这会破坏行结尾。