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 机器上开发并部署到弄乱行尾的服务器。
这是我的 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 机器上开发并部署到弄乱行尾的服务器。