带有时间添加空格的linuxmv命令
这是我的bash脚本,用于将csv文件复制到一个新文件,该文件的末尾添加了时间戳,然后将其复制到另一台服务器带有时间添加空格的linuxmv命令,linux,bash,scp,mv,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/
#!/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(空格)(空格)
然后,当
scp
试图定位文件时,由于末尾的空格,它无法将其归档。我已经放弃了,因为我已经尝试了所有的变体。每一步都要检查脚本。你所描述的不应该发生:
$ date +"%Y%m%d%H%M%S" | xxd
0000000: 3230 3136 3032 3034 3138 3034 3438 0a 20160204180448
输出中有一个换行符,但当您分配给变量时,它会消失,因此$timestamp
将是干净的
变量中的任何空格也将在ssh/scp行中消失,因为您的文件没有被引用-即使末尾有空格,在解析命令时也会被删除
为了确保这一点,您可以通过管道将输出或变量回送到xxd,如本例所示。如果空间真的发生了,你会看到它们
或者发布整个脚本(我假设这是一个修订版)谢谢。似乎只是编码不正确,行尾未设置为unix。我在windows机器上开发,并部署到服务器上,这会弄乱行尾。如果在设置时间戳和执行ssh的行之间添加一个包含
echo“\“$timestamp\”
的行,会发生什么情况?我看不出有任何方法可以做到这一点。即使$timestamp
中有空格,它们也会被丢弃,因为您没有引号中的变量。您如何看待文件名中的空格?非常感谢,似乎是编码问题,行尾未设置为unixright。日期命令是标准的。我建议使用“sh-x”选项调试脚本。