Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有时间添加空格的linuxmv命令_Linux_Bash_Scp_Mv - Fatal编程技术网

带有时间添加空格的linuxmv命令

带有时间添加空格的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/

这是我的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(空格)(空格)


然后,当
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”选项调试脚本。