目录
36. shell命令--dos2unix
功能说明
dos2unix 是一个在 Linux 和 Unix 系统中广泛使用的命令行工具,它的主要作用是将文件从 DOS/Windows 文本文件格式转换为 Unix/Linux 文本文件格式。DOS/Windows 文本文件通常使用回车符(CR,\r,ASCII 13)和换行符(LF,\n,ASCII 10)的组合(\r\n)作为行结束符,而 Unix/Linux 系统则仅使用换行符(LF,\n)作为行结束符。
dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。
DOS格式的文本文件在Linux下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件。如果是个shell脚本,而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。
语法格式
dos2unix [选项] 文件名
SYNOPSIS
dos2unix [options] [FILE ...] [-n INFILE OUTFILE ...]
unix2dos [options] [FILE ...] [-n INFILE OUTFILE ...]
选项说明
-k:保持输出文件的日期不变
-q:安静模式,不提示任何警告信息。
-V:显示 dos2unix 的版本信息。
-c:转换模式,模式有:ASCII, 7bit, ISO, Mac, 默认是:ASCII。
-o:写入到源文件,与 -n 类似,但允许你指定输出文件的名称
-n:不覆盖原文件,而是将转换后的内容写入到新文件
-h 或 --help:显示帮助信息。
实践操作
0. 环境准备
mkdir -p /test/dos2unix
cd /test/dos2unix
#Windows创建文本文件
0.1 在 Windows PowerShell 中操作(按 win + R 打开运行,输入 wt 回车即可)
a> 命令创建
cd .\Desktop\
echo windows1 >>windows1.txt
echo linux1 >>windows1.txt
cat windows1.txt
b> 鼠标创建
名称:
windows2.txt
内容如下:
#要有回车
windows2
linux2
0.2 将 Windows 下新建的 windows.txt 传到 Linux 服务器中
a> 直接拖拽,使用xshell 安装 lrzsz 工具,可以直接拖拽
b> 使用 xftp 上传也是可以的
c> 使用scp命令例如:scp windows*.txt root@10.4.7.99:/root
0.3 查看文件
head -v windows*
cat -A windows1.txt
cat -A windows2.txt
file -bi windows1.txt
file -bi windows2.txt
0.4 查看有没有dos2unix命令
which dos2unix
rpm -qa dos2unix
#yum install -y dos2unix #若没有,可以自行安装
1. 保留源文件,使用 -n 选项
ls
dos2unix -n windows1.txt linux1.txt #提示编码问题,一会解决
dos2unix -n windows2.txt linux2.txt
ls
file -bi linux2.txt
cat linux2.txt
cat -A linux2.txt
cat -A windows2.txt
iconv windows1.txt -f UTF-16 -t UTF-8 -o windows1-1.txt #用 iconv 转码
cat windows1-1.txt
cat -A windows1-1.txt
file -bi windows1-1.txt
dos2unix -n windows1-1.txt linux1.txt
file -bi linux1.txt
cat linux1.txt
cat -A linux1.txt
2. 不改变转换后文件的时间戳
ll windows2.txt linux2.txt
dos2unix -n -k windows2.txt linux2-1.txt
ll windows2.txt linux2.txt linux2-1.txt
cat -A linux2-1.txt
3. 静默转换,转换的时候不提示信息
dos2unix -n -q windows2.txt linux2-2.txt
cat -A linux2-2.txt
4. 直接在源文件基础上将此文件从 dos 格式转换为 unix 格式
cp windows2.txt windows3.txt
ll windows3.txt
cat -A windows3.txt
dos2unix windows3.txt
cat -A windows3.txt
5. 一次转换多个文件,把这些文件名直接跟在 dos2unix 之后
#注:也可以加上-o参数,也可以不加,效果一样
dos2unix windows1-1.txt windows2.txt
dos2unix -o windows1-1.txt windows2.txt
cat -A windows1-1.txt
cat -A windows2.txt
6. 批量转换目录中的文件(结合 find 命令)
ls
find . -type f -exec dos2unix {} \;
#这个命令会查找当前目录及其子目录下所有文件,并对它们执行 dos2unix 转换。
#注意,这可能会修改一些不应该被修改的文件(如二进制文件),因此请谨慎使用。
注意事项
- 在对重要文件进行转换之前,请确保你有备份。
- 考虑到 dos2unix 可能会修改二进制文件中的某些字节(如果它们看起来像行结束符),因此最好仅对文本文件使用此工具。
- 对于需要处理大量文件的场景,使用 find 命令结合 dos2unix 可以非常高效,但请确保你理解这会对哪些文件进行操作。