有选择地将 LF 更正为 CRLF

有选择地将 LF 更正为 CRLF

鉴于:

  • 一个大目录树,包含以下内容的混合:
    • 带有 LF 行结尾的文件
    • 以 CRLF 结尾的文件
    • LF 和 CRLF 行结尾奇怪混合的文件(由于错误)
    • 二进制文件
    • 即使损坏我也不想碰的其他文件
  • 可能包含空格的路径

我的目标是保留仅 LF 和仅 CRLF 文件,并将混合文件转换为仅 CRLF 文件,同时也保留最后两组。

这个咒语的作用是:

find . (some conditions to exclude stuff I don't want to mess with) |
    xargs -d '\n' unix2dos -ic | cut -c 3- |
    xargs -d '\n' dos2unix -ic | cut -c 3- |
    xargs -d '\n' unix2dos

但现在我很好奇是否有更好/更有效的方法来做到这一点。 (仅使用标准 shell 工具,而不是 Perl/Python/等)

FWIW,第一个unix2dos -ic是将初始列表过滤为仅包含 CRLF 的文件,然后dos2unix -ic子过滤到也包含 LF 的文件,最后一个实际上执行转换。这些cut调用是为了修剪掉混淆的两个前导空格xargs,并且-d是为了解决文件名中空格的问题,因为输出没有被引用。

相关内容