转换目录中所有文件的dos2unix行结尾

时间:2013-01-17 05:21:34

标签: sed awk

Curretly我使用以下命令来更改dos2unix行结尾,但这是针对file-y file ..有一种方法可以为目录中的所有文件运行此命令

sed -i 's/\r//' filename to convert dos2unix line endings

谢谢,

8 个答案:

答案 0 :(得分:30)

以递归方式对整个目录运行dos2unix的最简单方法是让find命令根据您的条件为它找到的每个文件执行它。

例如,要查找当前目录及其所有子目录中的所有文件(目录名称除外)并使dos2unix对每个文件执行默认转换:

find . -type f -exec dos2unix -k -s -o {} ';'

这将输出每个文件名,但不一定会更改每个文件名。其工作原理如下:

find .:在此目录中查找任何内容,包括其子目录,以及这些子目录中的任何内容(递归)
-type f:仅返回“常规文件”名称。从结果中排除文件夹名称 -exec:对每个结果执行以下命令。超出此点的所有内容都应被视为该命令的一部分,直到找到;字符为止 dos2unixdos2unix将使用以下选项执行...
-k:保持输出文件的日期戳与输入文件的日期标记相同 -s:跳过二进制文件(图像,档案等)。默认情况下包含此选项,但我仍然使用它,以防某些系统上的默认值不同(例如OS X v.Debian v.CentOS v.Ubuntu v。...)。 -o:将更改直接写入文件,而不是使用新格式的数据创建新文件 {}:这会告诉find插入已找到的文件名作为dos2unix来电的参数。
';':告诉find dos2unix的参数已经结束。除此之外的任何内容将再次被视为find的参数。

答案 1 :(得分:4)

for i in `find . -type f \( -name "*.c" -o -name "*.h" \)`; do    sed -i 's/\r//' $i ; done

答案 2 :(得分:2)

另一种选择:find your_dir type f -exec sed -i 's/\r//' {} \;

为什么不使用dos2unix命令?如果你只做上面的sed,可能会有文件(取决于它们的来源),这些文件会有不正确的EOF(你可以看到它,如果你运行cat并且之后的提示连接到文件输出)

答案 3 :(得分:2)

dos2unix *.txt

可以很好地转换目录中的所有* .txt文件...不需要'find'命令。

答案 4 :(得分:2)

简单:

sed -i 's/\r//' filename1 filename2 … filenameN

或者,如果您正在谈论一个目录的内容

sed -i 's/\r//' *

对我来说工作得很好。

答案 5 :(得分:1)

只需添加其他参考资料......

在Ubuntu 14.04上,man dos2unix页面提供了此示例,专门用于重复转换:

find . -name *.txt | xargs dos2unix

从手册页引用,这将

  

...转换当前目录树中的所有.txt文件   目录......

答案 6 :(得分:0)

使用

for i in `ls directory_path`; do    sed -i 's/\r//' $i ; done

整个目录。

答案 7 :(得分:0)

find $(pwd) -type f | xargs -I xxx sed -i 's/\r//g' xxx