将 Unix 行尾转换为 Windows

Mat*_*ten 44 windows linux text-editing newlines file-conversion

我最近从 Linux 回到了 Windows。我有一些带有 CRLF 的文件,一些带有 LF,一些是混合的。有没有一个实用程序可以帮助我找到我所有的 Unix-touched 文件并将它们转换为正确的 CRLF 终止文件?

该实用程序必须在 Windows 上运行,而不是在 Linux 上运行。我已经搬走了。如果可以避免的话,我宁愿不安装Cygwin

Joh*_*n T 40

您可以使用unix2dosLinux 平台上的实用程序转换它们。也有unix2dos 适用于 Windows 的版本

如果您安装了 Perl,您还可以使用这一行:

perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt
Run Code Online (Sandbox Code Playgroud)

  • 是和否。我写了我自己的爆破实用程序。我本可以从一开始就这样做,但我希望能节省 30 分钟。不幸的是,我对任何可用的实用程序都不满意。我发现最接近的损坏了目录中的任何二进制文件。 (8认同)
  • @Matthew Scouten:所以......你发现了一个在 Windows 上运行的 unix 实用程序!恭喜! (2认同)

小智 17

这是一个简单快捷的方法。

将文本文件拖放到Chrome中(我不知道其他浏览器),然后剪切并粘贴回原始文件:)

  • 呵呵……这个答案让我哈哈大笑 (2认同)

小智 10

我发现最适合递归浏览文件夹、允许文件过滤器并允许简单搜索 "\r\n" 并仅用 "\n" 替换它的是Notepad++

Notepad++ 是适用于 Windows 的最好的、免费的、开源的记事本程序之一。它非常简单和强大。它很好地处理了行尾搜索/替换。承包商使用 Linux \r\n 行尾将一堆 .c 和 .h 文件检查到我们的存储库中,但由于大多数人已经标准化了 Windows/Eclipse 构建工具,因此在转换行尾之前不会构建文件.

  • 如果要转换的文件数量很少,Notepad++ 也有一个简单的“编辑 -&gt; EOL 转换”菜单。 (10认同)
  • 我认为你在那里颠倒了结尾:linux 是 \n,windows 是 \r\n (8认同)

har*_*ymc 9

使用瑞士锉刀

例如:sfk addcr -dir . -file .txt -norec
在当前目录的所有 .txt 文件中,将 LF 结尾更改为 CR/LF,但不在子目录中(无递归)。

但这个程序的作用远不止于此。


小智 6

在 Cygwin 上,您可以使用两个内置实用程序在 Unix 和“DOS”AKA Windows 文件之间进行转换:

转换为 DOS CR/LF 格式:

u2d filename
Run Code Online (Sandbox Code Playgroud)

转换回 Unix CR 格式:

d2u filename
Run Code Online (Sandbox Code Playgroud)

该文件以相同的名称保留在原处。

享受!瑞克


gma*_*man 5

我要把这个解决方案扔出去。Git 会做到这一点。看这个帖子

所以理论上你可以这样做来转换整棵树

cd root/of/tree
git init .
git add .
git commit -m "initial commit"
echo "* text eol=crlf" > .gitattributes
git rm --cached -r .
git reset --hard
Run Code Online (Sandbox Code Playgroud)

如果您想走另一条路,请更改crlflf。注意:你还没有完成,继续阅读

键入git status以查看哪些文件将受到影响。您可能需要添加类似的行

*.jpg binary
*.png binary
*.gif binary
Run Code Online (Sandbox Code Playgroud)

等以.gitattributes避免转换某些文件。您还可以将某些文件显式标记为文本

*.md text
*.css text
Run Code Online (Sandbox Code Playgroud)

然后在编辑后重复这两行 .gitattributes

git rm --cached -r .
git reset --hard
Run Code Online (Sandbox Code Playgroud)

然后git status再次使用以查看将更改哪些文件。当您确定要影响的所有文件都已列出时,git status然后提交

git add .
git commit -m "normalize line endings"
Run Code Online (Sandbox Code Playgroud)

现在再次检查所有文件

git rm --cached -r .
git reset --hard
Run Code Online (Sandbox Code Playgroud)

他们现在应该有你想要的任何行尾

** 注意:如果你已经在使用 git 跳过前 3 个命令 git 命令。如果您没有使用 git,您现在可以删除.gitattributes文件和.git文件夹。

** 备份您的文件:将git rm --cached -r它们全部删除(尽管它们理论上在您的 git 存储库(.git 文件夹)中,这就是它们通过最后一个命令恢复的方式git reset --hard。只是因为文件被删除,最好备份它们向上。