?从 ssh 复制时附加到文件名

?从 ssh 复制时附加到文件名

我正在使用命令cp error.log error$HOSTNAME.log

该命令在服务器中单独运行时可以正常工作,但如果它作为使用 ssh 的脚本运行,我会?在文件名后附加一个 。在脚本中,我使用ssh来自其他服务器的名称在本地复制错误日志,arerro$HOSTNAME.log但这复制为arerror$HOSTNAME.log?

答案1

文件名实际上很可能不包含问号。相反,该ls命令显示此字符而不是不可打印的字符。鉴于此字符出现在您在脚本中指定的文件名的末尾,它可能是一个回车符。

为什么脚本中会有回车符?因为您是在 Windows 编辑器中编辑的。 Windows 用两个字符序列 CR、LF(回车、换行)表示换行符,而 Unix 仅使用 LF 字符。因此,从 Unix 的角度来看,您的脚本包含一行,其中最后一个字符是普通字符 CR。

使用 Unix 编辑器编辑脚本,或者使用允许您使用 Unix 行结尾保存的 Windows 编辑器。

要修复已创建的文件,可以使用以下命令:

cr=$(printf '\r')
find . -name "*$cr" -exec sh -c 'for x do mv "$x" "${x%.}"; done' _ {} +

相关内容