处理Windows文件格式为Linux文件格式的方法

Posted gj4990

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理Windows文件格式为Linux文件格式的方法相关的知识,希望对你有一定的参考价值。

本文将介绍处理Windows文件格式为Linux文件格式的3种方法。

1 判断Windows文件格式

在Linux系统中,当我们执行shell脚本时,有时会出现以下错误:

[root@master test]# sh t.sh
t.sh: line 2: $'\\r': command not found
hello world

该错误的原因就是脚本文件为Windows文件格式,我们可以通过使用vi -b <file>查看是否为Windows文件格式。即

[root@master test]# vi -b t.sh
#!/bin/bash^M
^M
echo "hello world"

在该文件的一行结束位置有^M字符,表示该文件为Windows文件格式,如何批量的将Windows文件格式转换为Linux文件格式呢?下面介绍3种处理方法。

2 处理Windows文件格式为Linux文件格式的方法

1 Linux sed命令处理

[root@master test]# find . -type f -print0|xargs -0 -I sed -i -e "s/\\r//g" 

2 linux dos2unix命令处理

[root@master test]# find . -type f -print0|xargs -0 -I dos2unix 

3 python处理

下面的python程序将处理指定目录下以postfixes列表中结尾的文件,将匹配文件中tab替换成4个空格,且修改文件格式为unix格式。

import os

lineList = []
postfixes = ['.py', '.java', '.c', '.cpp', '.h']

def deal_lines(file_name):
    cmd = "dos2unix -ascii %s" %file_name
    os.system(cmd)
    with open(file_name, 'r') as f:
        for line in f:
            str = line.replace('\\t', '    ').rstrip()
            yield str + "\\n"

def format_covert(file_path):
    for path, dirs, files in os.walk(file_path):
        for name in files:
            full_path = os.path.join(path, name)
            norm_path = os.path.normpath(os.path.abspath(full_path))
            modifyFileFlag = any([norm_path.endswith(postfix) for postfix in postfixes])
            if modifyFileFlag:
                for line in deal_lines(norm_path):
                    lineList.append(line)
                with open(norm_path, 'w+') as f:
                    for index in range(0, len(lineList)):
                        f.write(lineList[index])
                del lineList[:]

if __name__ == '__main__':
    file_path = raw_input('Please input a file path: ')
    format_covert(file_path)

3 总结

由于sed命令是linux系统内置命令,而dos2unix命令默认情况下是不带的,需要安装后才能使用,因此建议使用sed命令进行处理。

 

以上是关于处理Windows文件格式为Linux文件格式的方法的主要内容,如果未能解决你的问题,请参考以下文章

Linux 对音频万能处理的命令——SOX

windows下上传shell脚本不能运行—将dos模式修改为unix 文件格式

文件编码格式转换

关于Linux下的文本文件格式转换问题。

如何将linux格式文件转成windows可认文件

Linux 如何查看文件编码格式及转换文件编码