
Linux dos2unix 命令
dos2unix 是一款用于将文本文件从 DOS/Windows 格式转换为 Unix/Linux 格式的。它主要用于解决由于不同换行符差异引起的问题。
主要功能:
- 将 Windows/DOS 风格的换行符(CRLF)转换为 Unix/Linux 风格的 LF 换行符
- 可选地处理文件编码
- 支持批量文件转换
为何需要 dos2unix
换行符的差异
不同系统采用不同的换行方式:
- Windows/DOS:采用回车+换行(CRLF,
rn
登录后复制 )
- Unix/Linux:仅用换行(LF,
n
登录后复制 )
- 旧版 Mac OS:使用回车(CR,
r
登录后复制 )
问题表现
当在 Linux 系统中打开 Windows 创建的文本文件时:
- 文件中可能出现
^M
登录后复制 符号(vi 编辑器可见)
- 脚本可能无法执行
- 工具如 grep、awk 可能解析错误
安装 dos2unix
多数 Linux 发行版默认未预装 dos2unix,需手动安装:
Ubuntu/Debian
实例
sudo apt-get update
sudo apt-get install dos2unix
CentOS/RHEL
<pre class="brush:php;toolbar:false;">sudo yum install dos2unix
登录后复制
验证安装
<pre class="brush:php;toolbar:false;">dos2unix --version
登录后复制
基本用法
<pre class="brush:php;toolbar:false;">dos2unix [参数] 文件...
登录后复制
常见参数
参数 | 说明 |
---|---|
`-k` | 保持文件时间戳不变 |
`-f` | 强制转换,跳过二进制检查 |
`-q` | 静默模式,不输出警告 |
`-o` | 覆盖原文件(默认操作) |
`-n` | 生成新文件,保留原文件 |
`-c` | 转换编码(配合 `-e` 使用) |
`-e` | 指定目标编码(如 `-e utf8`) |
`-b` | 创建 `.bak` 备份文件 |
使用示例
1. 基础转换
<pre class="brush:php;toolbar:false;">dos2unix file.txt
登录后复制
直接修改 file.txt 内容
2. 不修改原文件
<pre class="brush:php;toolbar:false;">dos2unix -n file.txt newfile.txt
登录后复制
转换后结果写入 newfile.txt,原文件不变
将图片转换为吉卜力艺术风格的作品
86
3. 批量处理文件
<pre class="brush:php;toolbar:false;">dos2unix *.txt
登录后复制
转换当前目录下所有 .txt 文件
4. 递归处理目录
<pre class="brush:php;toolbar:false;">find . -type f -name "*.sh" -exec dos2unix {} ;
登录后复制
转换当前目录及其子目录中的所有 .sh 文件
5. 保持文件时间戳
<pre class="brush:php;toolbar:false;">dos2unix -k script.py
登录后复制
转换脚本但不更改其时间属性
实际应用场景
1. 解决 Windows 传输脚本问题
实例
# 转换脚本
dos2unix backup_script.sh
# 添加执行权限
chmod +x backup_script.sh
# 运行脚本
./backup_script.sh
2. 统一团队共享配置
实例
# 转换整个配置目录
find /etc/myapp/conf.d/ -type f -exec dos2unix {} ;
3. 准备上传至 Linux 的文件
<pre class="brush:php;toolbar:false;">dos2unix -b *.php # 转换并保留备份
登录后复制
注意事项
- 避免处理二进制文件:误用可能导致文件损坏
- 版本控制建议:Git 等系统应统一设置换行符规则
- 非 ASCII 字符支持:含特殊字符时需使用
-c
登录后复制 和
-e
登录后复制 参数
- 重要:推荐使用
-b
登录后复制 创建
.bak
登录后复制 文件
其他方法
若未安装 dos2unix,可用以下替代方案:
1. tr 命令
<pre class="brush:php;toolbar:false;">tr -d 'r' unixfile.txt
登录后复制
2. sed 命令
<pre class="brush:php;toolbar:false;">sed -i 's/r$//' winfile.txt
登录后复制
3. vim 编辑器
实例
:set ff=unix
:wq
总结
dos2unix 是跨平台文本格式转换的必备工具,适用于:
- 系统管理员维护服务器环境
- 开发者多平台协作开发
- 从 Windows 向 Linux 迁移脚本和配置文件
熟练掌握该命令可有效避免换行符引发的各种兼容性问题,提升工作效率。