如何以递归方式在目录中的所有文件中搜索和删除^ M?

maa*_*n81 1 bash shell ubuntu

在Windows中编辑的文件在结束行中具有M ^.我该如何删除它们?

neh*_*art 8

注意

使用此命令时要小心,因为无论位置或上下文如何,它都将替换所有 LF/CR字符序列.在具有二进制文件或具有特殊配置格式的文件的情况下,请格外小心.具有git子模块的目录是一个可能会出现此命令问题的示例,因为字符序列已经存储为持久提交.

它是回车的控制代码.Windows对行分隔符使用LF/CR表示法,而UNIX系统仅使用LF.

下面应该对文件系统树中相对于当前目录递归的所有文件执行此操作.

find . -type f | xargs -Ix sed -i.bak -r 's/\r//g' x
Run Code Online (Sandbox Code Playgroud)

上面的代码将进行自动备份(扩展名.bak附加到文件名).

确保文件正常后,使用以下命令删除备份.

find . -type f -name '*.bak' | xargs -Ix rm x
Run Code Online (Sandbox Code Playgroud)

  • 如果目录中有git子模块,请不要使用此命令. (3认同)