Mat*_*ten 44 windows linux text-editing newlines file-conversion
我最近从 Linux 回到了 Windows。我有一些带有 CRLF 的文件,一些带有 LF,一些是混合的。有没有一个实用程序可以帮助我找到我所有的 Unix-touched 文件并将它们转换为正确的 CRLF 终止文件?
该实用程序必须在 Windows 上运行,而不是在 Linux 上运行。我已经搬走了。如果可以避免的话,我宁愿不安装Cygwin。
Joh*_*n T 40
您可以使用unix2dos
Linux 平台上的实用程序转换它们。也有unix2dos
适用于 Windows 的版本。
如果您安装了 Perl,您还可以使用这一行:
perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt
Run Code Online (Sandbox Code Playgroud)
小智 10
我发现最适合递归浏览文件夹、允许文件过滤器并允许简单搜索 "\r\n" 并仅用 "\n" 替换它的是Notepad++。
Notepad++ 是适用于 Windows 的最好的、免费的、开源的记事本程序之一。它非常简单和强大。它很好地处理了行尾搜索/替换。承包商使用 Linux \r\n 行尾将一堆 .c 和 .h 文件检查到我们的存储库中,但由于大多数人已经标准化了 Windows/Eclipse 构建工具,因此在转换行尾之前不会构建文件.
小智 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)
该文件以相同的名称保留在原处。
享受!瑞克
我要把这个解决方案扔出去。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)
如果您想走另一条路,请更改crlf
为lf
。注意:你还没有完成,继续阅读
键入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
。只是因为文件被删除,最好备份它们向上。