文件格式批量转换(dos to unix)-自动转换^M符号
转载并修改自 如何转换^M行末符号,侵删。
文章目录
- 1. 问题描述
- 1.1 问题描述
- 1.2 查看
- 2. 解决办法
- 2.1 用VIM打开,设置编码为unix
- 2.2 使用VIM的替换功能,替换行末的\r符号即可
- 2.3 使用sed来进行批量处理
- 2.4 批量处理(dos2unix,需sudo权限安装格式转换工具)
- 3. 问题的根源
1. 问题描述
1.1 问题描述
Windows(dos)和Linux(unix)系统中,对于格式处理存在差异,比如“行末符”的表示不同,Windows下面是\r\n
(CR-回车,LD-换行),而Linux则是\n
(LD-换行)。
因此,如果在Windows下面编辑的脚本文件,如shell脚本文件,在Linux下面执行失败,会提示多一个^M
符号,用VIM打开也会发现增加这个符号,或通过 cat -A 文件名
看到这些隐藏字符。
注意:^M
使用 ctrl+V ctrl+M
输入
1.2 查看
直接vim filename无法看到^M
,可以搭配-b参数确认
vim -b filename
2. 解决办法
2.1 用VIM打开,设置编码为unix
:set fileformat=unix
或
: set ff=unix
然后,保存,结尾unix格式。
2.2 使用VIM的替换功能,替换行末的\r符号即可
:%s/^M//g
2.3 使用sed来进行批量处理
sed ’s/^M//’ filename > tmp_filename
2.4 批量处理(dos2unix,需sudo权限安装格式转换工具)
sudo apt-get install dos2unix
可直接使用dos2unix filename
直接转换。
但考虑到批量及递归修改,dos2unix命令并不支持递归选项,因此借用find
和xargs
实现批量处理。
find . * | xargs dos2unix (对当前目录下面的所有文件执行转换格式的命令)
或
find -type f | xargs dos2unix
另外,dos2unix自动识别的格式转换可能并不能达到批量效果(可能是因为目录下文件格式混乱),所以保险起见,最好加上指定的转换参数,如:
find -type f | xargs dos2unix -U
附,dos2unix --help
$ dos2unix --help
usage:dos2unix [--verbose|-v] [--test|-t] [--force|-f] \[--<x>2<y>|--auto|-<Z>] \[<file name> [...]]
where:--auto, -A output will be set based upon auto-detectionof source format--d2u, -U perform DOS -> UNIX conversion--m2u, -T perform MAC -> UNIX conversion--u2d, -D perform UNIX -> DOS conversion--u2m, -M perform UNIX -> MAC conversion--d2m, -O perform DOS -> MAC conversion--m2d, -C perform MAC -> DOS conversion--force suppress internal conversion type correctionsbased on autodetected input format--skipbin, -b skip binary files--test, -t don't write any conversion results; useful with--verbose to just report on source type--verbose, -v print extra information on stderr--version, -V print version information on stderr- when no options are given then input format will be automatically detectedand converted as follows:DOS -> UNIXMAC -> UNIXUNIX -> DOS
- same as above applies if --auto option is used
- when no file is given, then stdin is used as input and stdout as output
- binary files will be skipped automatically if option --skipbin(or -b) is used
- stray '\r' characters (without a following '\n') in files in DOS format arereported but only conversion 'DOS -> Unix' affects them (they are skipped)
- stray '\n' characters in files in MAC format are not detected for now
注意:
dos2unix需要root权限,我开始的时候没有用sudo运行,提示转换失败,后来利用sudo执行即可。
3. 问题的根源
在Windows下面拉取Git上面的代码,结果给版本库所有的文件都加上了行末符号,而在Linux下面再次编辑该文件就发现所有的问题都出现问题,提交的时候又不能
把所有的文件都提交成Windows的编码,因为这部分修改是没有意义的,所以需要批量转换。
文件格式批量转换(dos to unix)-自动转换^M符号相关推荐
- 中文 gbk gb2312 在线转换 编码码 对照表 自动转换 在线转换(推荐)
http://bm.kdd.cc/index.chuli?zy=1&u=GBK&wz=%E9%AA%8C%E8%AF%81%E7%A0%81 中文 gbk gb2312 在线转换 编 ...
- 文件格式转换DOS到UNIX:dos2unix+UltraEdit(解决no such file or directory问题)
在windows上编辑好sh后到linux下运行时常会出现"no such file or directory",如果确实存在文件,可能是格式的问题,脚本文件是DOS格式的, 即每 ...
- 批量将目录下所有文件进行 dos/unix 格式转换
一.问题产生的原因: DOS/Windows和Linux/Unix的文件换行回车格式不同,基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),而 UNIX 文本只 ...
- PHP是弱类型语言,自动转换,强制转换
强制转换: (int) - 转换成整型 (bool) - 转换.成布尔型 (float) - 转换成浮点型 (string) - 转换成字符串 (array) - 转换成数组 (object) - 转 ...
- vb.net 同时给多个属性赋值_Python尚学堂高淇|1721时间表示unix时间点毫秒微秒time模块浮点数自动转换强制转换增强赋值运算符...
017浮点数-自动转换-强制转换-增强赋值运算符浮点数称为float用a*b^10形式表示的科学计数法,比如:3.14,314E-2或者314e-2这些数字在内存当中也是按照科学计数法存储. > ...
- python实现文件格式转换_python实现快速文件格式批量转换的方法
用python实现文件夹下的成批文件格式转换 我们对于文件转换的需求很大,甚至于对于图片的格式,JPG和PNG格式在肉眼看来都没什么差别,但是对于计算机而言,它有时候就只接受这些肉眼看起来差不多的格式 ...
- python 文件批量转换格式_python实现快速文件格式批量转换的方法
用python实现文件夹下的成批文件格式转换 我们对于文件转换的需求很大,甚至于对于图片的格式,JPG和PNG格式在肉眼看来都没什么差别,但是对于计算机而言,它有时候就只接受这些肉眼看起来差不多的格式 ...
- linux怎么把dos改成unix_dos2unix命令 – 将DOS格式的文本文件转换成UNIX格式
dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文件是以\r\n作为断行标志的 ...
- 代码编码格式,文件格式批量转换工具
V1.6 增加utf8无bom格式 V1.5: 支持直接拖拽文件.目录到程序 新增多线程转换.优化多文件转换的体验 增加更多编码支持 优化编码选择界面布局 打开别的代码的时候经常会遇到编码不一致导致乱 ...
- Git下载代码到Windows再拷贝到Linux下编译时要关闭换行符自动转换
Git下载代码到Windows再拷贝到Linux下编译时要关闭换行符自动转换 一.各操作系统下文件换行符 二.TortoiseGit下载Github代码关闭文件换行符 三.示例说明 1.开启换行符自动 ...
最新文章
- 高效5步走,高速搭建Hadoop2伪分布环境
- [html] 你知道什么是粘性布局吗?
- ERROR: Start Page at 'www/index.html' was not found
- [转载] 重新抛出异常与 public Throwable fillInStackTrace()
- sql server计算日期到当前日期天数_Excel必学的7个计算日期间隔差的技巧
- SpringBoot学习---页面国际化
- 深度 ghost linux系统,用Ghost实现Linux系统的备份
- c语言编译器官网,C语言编译器app_c语言编译器app官网下载_c语言编译器手机版app-多特软件站安卓网...
- 2022精选最新金融银行面试真题——附带答案
- 无线传感网MAC协议
- AutoCAD输出矢量图
- 【php】PHP制作QQ微信支付宝三合一收款码
- 李少白讲摄影-不放过一切光线地坛书市新书首发圆满结束
- springMVC 一些文章
- 记录docker镜像中证书验证失败导致更新不成功
- linux 查看磁盘寿命,如何确定Linux下SSD的写周期数或预期寿命?
- Android 设置Switch样式
- 大数据之Javase
- JavaFX游戏制作:让你的精灵动起来
- 黑马Vue.Js项目实战(完整)