Curretly我使用以下命令来更改dos2unix行结尾,但这是for file-y file ..有一种方法可以对目录中的所有文件运行此命令
sed -i 's/\r//' filename
Run Code Online (Sandbox Code Playgroud)
谢谢,
Bry*_*son 32
以dos2unix
递归方式对整个目录运行的最简单方法是让find
命令根据您的条件为它找到的每个文件执行它.
例如,要查找当前目录及其所有子目录中的所有文件(目录名称除外),dos2unix
并对每个文件执行默认转换:
find . -type f -exec dos2unix -k -s -o {} ';'
Run Code Online (Sandbox Code Playgroud)
这将输出每个文件名,但不一定会更改每个文件名.其工作原理如下:
find .
:在此目录中查找任何内容,包括其子目录,以及这些子目录中的任何内容(递归)
-type f
:仅返回"常规文件"名称.从结果中排除文件夹名称.
-exec
:对每个结果执行以下命令.除此之外的所有内容都应被视为该命令的一部分,直到;
找到该角色.
dos2unix
:dos2unix
将使用以下选项执行...
-k
:保持输出文件的日期戳与输入文件相同
-s
:跳过二进制文件(图像,存档等).默认情况下包含此选项,但我仍然使用它,以防某些系统上的默认值不同(例如OS X v.Debian v.CentOS v.Ubuntu v ....).
-o
:将更改直接写入文件,而不是使用新格式的数据创建新文件.
{}
:这告诉find
插入它找到的文件名作为dos2unix
调用的参数.
';'
:告诉已经结束find
的参数dos2unix
.超出这一点的任何事情将再次被视为参数find
.
for i in `find . -type f \( -name "*.c" -o -name "*.h" \)`; do sed -i 's/\r//' $i ; done
Run Code Online (Sandbox Code Playgroud)
简单的:
sed -i 's/\r//' filename1 filename2 … filenameN
Run Code Online (Sandbox Code Playgroud)
或者,如果您正在谈论一个目录的内容
sed -i 's/\r//' *
Run Code Online (Sandbox Code Playgroud)
对我来说工作得很好。