Linux 时间加空格的mv命令

Linux mv command with time adding spaces

这是我的 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 试图定位文件时,由于末尾有空格,它无法归档。我已经放弃了,因为我尝试了所有的变化。

每一步都要检查脚本。你描述的情况不应该发生:

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

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

变量中的任何 spaces 也会在 ssh / scp 行消失,因为你的文件没有被引用 - 即使最后有一个 space,它也会解析命令时被丢弃。

为了确保,您可以通过管道输出,或像本例中那样将变量回显到 xxd。如果确实发生,您实际上会看到 space。

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

谢谢。似乎是编码不正确,行尾未设置为 unix。我在 windows 机器上开发并部署到弄乱行尾的服务器。