Dos2Unix / Unix2Dos - 文件格式相互转换
  运维技术   2 条  提交百度

Dos2Unix / Unix2Dos - 文件格式相互转换

  运维技术   2 条  提交百度

54513.jpg

前言

最近在给CentOS系统配置环境变量的时候,因操作不慎把/etc/profile文件给玩坏了,尽管勉强能恢复文件,但在执行生效配置命令 source /etc/profile 报错如下:

-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: /etc/profile: line 11: syntax error near unexpected token `$'{\r''
'bash: /etc/profile: line 11: `pathmunge () {

比较郁闷明明已经恢复原始配置文件了,依然存在报错,使用 cat -v /etc/profile 命令检查一下发现文件中多了大量的Windows下的换行符^M

546133.jpg

解决方案:执行dos2unix /etc/profile将profile文件从Windows格式文件转换为Unix、Linux格式,然后在执行source /etc/profile使之生效,问题解决 ,这也是这篇文章诞生的原因。

安装

yum -y install dos2unix unix2dos

语法

dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]

选项

-k:保持输出文件的日期不变
-q:安静模式,不提示任何警告信息
-V:查看版本
-c:转换模式,模式有:ASCII, 7bit, ISO, Mac, 默认是:ASCII
-o:写入到源文件
-n:写入到新文件

实例:

方法一

最简单的用法就是dos2unix直接跟上文件名:

dos2unix file 

如果一次转换多个文件,把这些文件名直接跟在dos2unix之后。(注:也可以加上-o参数,也可以不加,效果一样)

dos2unix file1 file2 file3 
dos2unix -o file1 file2 file3 

上面在转换时,都会直接在原来的文件上修改,如果想把转换的结果保存在别的文件,而源文件不变,则可以使用-n参数。

dos2unix oldfile newfile 

如果要保持文件时间戳不变,加上-k参数。所以上面几条命令都是可以加上-k参数来保持文件时间戳的。

dos2unix -k file
dos2unix -k file1 file2 file3
dos2unix -k -o file1 file2 file3
dos2unix -k -n oldfile newfile

以上是转换单个文件,如果要转换目录或文件夹的话,请看方法二。

方法二

Linux系统本身提供了dos2unixunix2dos这两个命令来实现Windows和Linux系统文件的转换,但是dos2unixunix2dos本身没有提供递归也就是批量修改的方式,这样一来我们就需要借助于xargs命令了。

xargs的命令的作用就是将参数列表转换成小块分段传递给其他命令,借助于xargs,我们可以很简单的实现批量替换;

这里假设我需要替换的文件所在目录为 public/components目录下。

find public/components/ -name "*" | xargs dos2unix

其中,*号表示所有文件。

要更改文件格式的后缀为.py ,那么借助于下面的命令就可以轻松的实现批量替换格式:
批量替换为linux文件格式:

sudo find public/components/ -name "*.py" | xargs dos2unix

批量替换为dos文件格式:

sudo find public/components/ -name "*.py" | xargs unix2dos

优点:批量替换,工作量小, 总的来说,方法二借助于管道符和xargs来实现的批量命令,将方法二修改一下就可以实现很多的批量操作。比如:

1、批量删除整个linux系统中后缀为.tmp的文件;那么命令可以这么写:

sudo find /home/test -name "*.tmp" | xargs rm -f

2、删除整个linux系统中与apache相关的文件:

sudo find /home/test -name "*apache" | xargs rm -rf

鹧鸪菜菜子

(๑>ڡ<)☆谢谢老板~

使用微信扫描二维码完成支付

发表评论
  1. 不能评论了吗

    回复
    1. 猫屎咖啡
      @鹧鸪菜菜子

      评论怎么了

      回复