【问题标题】:Preserve new line characters when editing remote file from WinSCP从 WinSCP 编辑远程文件时保留换行符
【发布时间】:2017-09-25 07:47:27
【问题描述】:

据我所知,如果我在我的 Solaris 服务器上创建一个文件,我将自动获得 LF 结束行。

设置:我远程登录到 Windows 服务器(只要我连接到它就没有互联网)。在这台 Windows 服务器上,我使用 Winscp 登录到 solaris 服务器。

问题:当我在 Solaris 服务器上(使用 WinSCP)创建一个文本文件时,我可以使用 Notepad++ 打开它。当我打开文件时,它总是以 CRLF 作为换行符,我不知道为什么。然后我通过使用“查找和替换”从“/r/n”到“/n”将 CRLF 字符更改为 LF。当我找到并替换时,我看到换行符已更改为“LF”。但是,一旦我保存文件并重新打开它,我们就会返回“CRLF”。

这可能是 notepadd++ 向我显示的错误字符可能与通过 WinSCP 打开 Solaris 文件有关吗?

或者我应该使用 shell 脚本 (bash) 创建文件?

即使我使用 shell 脚本创建文件,我如何确定该文件中的换行符是 LF 而不是 CRLF(有没有办法在终端上执行此操作?),因为现在我正在使用 Notepad++ 和当我重新打开文件时,它总是将 CRLF 显示为换行符。

目标:我想要的只是创建任何带有“LF”作为换行符的文本文件。我正在使用 Solaris bash。

【问题讨论】:

  • 我用过dos2unix,但问题依然存在,我无法验证换行符是LF还是CRLF。

标签: notepad++ solaris winscp


【解决方案1】:

winscp 所做的是它打开了一个内部文本编辑器供您输入文本内容。它以您指定的名称保存到本地 Windows 机器上的临时文件中,最后以 ascii 模式将其传输到 Solaris。

当您将它下载到 Windows 时,它很可能也是以 ascii 模式下载的。结果,更改行字符被转换为 Windows 风格的 CR+LF。

看起来不错。如果你想确定它,我建议你在 Solaris 上使用 vi 等编辑器检查文件内容。 Winscp 有一个菜单选项 Commands -> Open in PuTTY。

【讨论】:

  • 您能否建议我一种方法,我可以在 Solaris 上确认或以其他方式确认结束行字符是“LF”还是“CRLF”?因为我在 Solaris 上只有 vi 并且它不显示结束符。此外,标准 winscp 文本编辑器也不显示换行符。
  • 我找到了一种检查文件是否以 LF 结尾的方法。只需将文件作为二进制文件从 Solaris 复制到 Windows。然后它会在相关的地方显示 LF。
  • 根据我的经验,如果一行以 CRLF 结尾,vi 会以 ^M 之类的形式显示它。
【解决方案2】:

默认情况下,WinSCP 不会转换 EOL 序列以在外部编辑器中编辑文件,除非该编辑器是 Windows 内置 notepad.exe

所以你必须自己启用偏好转换。

请参阅Editor Preferences dialog 上的强制使用外部编辑器编辑的文件的文本传输模式选项:

关闭该选项后,您将在 Notepad++ 中打开文件,就像它存储在服务器上一样。

【讨论】:

    【解决方案3】:

    有一些选择。您可以设置 Notepad++ 来创建 Unix 风格的文本文件。另一种选择是设置 scp 以便它以文本模式传输文本文件。第三个选项,但是每次运行可能会有些不便 - dos2unix 命令完全符合您的需要 第四种选择是在 Unix 终端中使用 vi 或一些编辑器。我认为没有必要为此编写脚本。

    【讨论】:

      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多