Linux 批量替换文件夹下面的 Windows 换行符替换为 unix 风格换行符
在Linux系统中,Windows风格的换行符(\r\n
,即回车加换行)和Unix风格的换行符(\n
)是不同的。Windows系统中的文本文件在Linux中可能会显示为带有^M
字符的文件,这是因为^M
是回车符(CR,Carriage Return)的表示方式。
有的时候将Linux中的文件或者Windows的文件互相拷贝的时候会自动转换换行符,经常遇到的情况是Windows下面可以正常运行一些unix风格的脚本,但是Linux中却无法运行Windows dos风格的文件。
要将一个文件夹中所有文件的Windows换行符替换为Unix风格的换行符,可以使用find
命令结合sed
或dos2unix
工具来完成。以下是几种方法:
- 使用
find
和sed
:1
find /path/to/folder -type f -exec sed -i 's/\r$//' {} +
这里
/path/to/folder
是你的文件夹路径。这个命令会找到该文件夹下所有的文件(不包括子文件夹中的文件),并使用sed
命令删除每行末尾的^M
字符。 - 使用
find
和dos2unix
: 如果你的系统中安装了dos2unix
工具,可以使用以下命令:1
find /path/to/folder -type f -exec dos2unix {} +
dos2unix
会将Windows格式的文本文件转换为Unix格式。 - 使用
find
和unix2dos
: 如果你只有unix2dos
工具,可以反向使用它来去除^M
:1
find /path/to/folder -type f -exec unix2dos -n {} {}.unix2dos \; && mv {} {}.unix2dos
这个命令首先创建一个临时文件,然后使用
unix2dos
将Unix格式转换为Windows格式,这会去掉每行末尾的^M
。之后,使用mv
命令将临时文件替换原文件。 - 使用
fromdos
: 在某些Linux发行版中,fromdos
是一个可以用来转换文件的工具:1
find /path/to/folder -type f -exec fromdos {} \;
如果只有一个文件或者文件少的话也可以直接通过一些文本编辑器自带的转换功能。如果使用vim/gvim的话可以在命令行模式使用以下方法转换:
1
2
3
4
5
6
7
## 查看当前换行符
:set ff
## 替换为Linux
:set ff=unix
## 替换为Windows
:e +iff=dos
本文由作者按照
CC BY 4.0
进行授权