在没有dos2unix的情况下递归转换目录和子目录中所有文件的所有EOL(dos-> unix)

use*_*233 10 unix linux bash command-line end-of-line

如何转换所有EOL(DOS的> UNIX)目录中的所有文件和子目录的递归没有 dos2unix?(我没有它,也无法安装它.)

有没有办法使用tr -d '\r'和管道?如果是这样,怎么样?

smo*_*ing 12

对于当前目录中的所有文件,您可以使用Perl one-liner进行:( perl -pi -e 's/\r\n/\n/g' *这里)

编辑:通过一个小修改你可以做子目录递归:

find | xargs perl -pi -e 's/\r\n/\n/g'
Run Code Online (Sandbox Code Playgroud)

  • 注意你是否在*Git*repository上使用此命令.从find中排除`.git`子目录. (6认同)
  • 如果你的`find`和`xargs`支持它:`find -print0 | xargs -0 ...`将处理带有空格的文件名. (2认同)

Tim*_*ote 8

您可以使用sed的-i标志来就地更改文件:

find . -type f -exec sed -i 's/\x0d//g' {} \+
Run Code Online (Sandbox Code Playgroud)

如果我是你,我会保留文件以确保操作正常.然后,您可以在完成后删除临时文件.这可以这样做:

find . -type f -exec sed -i'.OLD' 's/\x0d//g' {} \+
find . -type f -name '*.OLD' -delete
Run Code Online (Sandbox Code Playgroud)