Linux 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/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,如本例所示。如果它们确实发生,您实际上会看到这些空间。

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

关于Linux mv 命令时间加空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35194492/

相关文章:

linux - 在 bash 中定义标志参数

linux - 搜索相似的重复文件名(文件名末尾的日期戳不同)

linux - OpenWrt 脚本(无限循环)停止通过串行端口发送数据

linux - 跨gdb : fix a mismatch between libthread_db and libpthread

bash - 在公共(public)列上合并两个文件并使用 awk 打印所有列

linux - 使用 scp 从服务器下载文件时出错

windows - 使用 libssh 库时,我遇到了 ssh_scp_read 函数的问题

linux - 如何避免长度小于 5 的命令被写入 ~/.bash_history

c - socketpair() 以只读方式打开套接字端?