Curretly我使用以下命令来更改dos2unix行结尾,但这是针对file-y file ..有一种方法可以为目录中的所有文件运行此命令
sed -i 's/\r//' filename to convert dos2unix line endings
谢谢,
答案 0 :(得分:30)
以递归方式对整个目录运行dos2unix
的最简单方法是让find
命令根据您的条件为它找到的每个文件执行它。
例如,要查找当前目录及其所有子目录中的所有文件(目录名称除外)并使dos2unix
对每个文件执行默认转换:
find . -type f -exec dos2unix -k -s -o {} ';'
这将输出每个文件名,但不一定会更改每个文件名。其工作原理如下:
find .
:在此目录中查找任何内容,包括其子目录,以及这些子目录中的任何内容(递归)
-type f
:仅返回“常规文件”名称。从结果中排除文件夹名称
-exec
:对每个结果执行以下命令。超出此点的所有内容都应被视为该命令的一部分,直到找到;
字符为止
dos2unix
:dos2unix
将使用以下选项执行...
-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