我必须使用dos2unix转换整个目录。我不知道该怎么做这件事。


当前回答

找到。-type f -print0 | xargs -0 dos2unix . txt

将递归找到当前目录内的所有文件,并调用这些文件dos2unix命令

其他回答

对于任何Solaris用户(我使用5.10,可能也适用于更新版本,以及其他unix系统):

Dos2unix不会默认覆盖文件,它只会将更新后的版本打印到stdout,所以你必须指定源和目标,即相同的名称两次:

find . -type f -exec dos2unix {} {} \;

如果它是一个大目录,你可能需要考虑运行多个处理器:

find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix 

这将一次传递一个文件,并使用4个处理器。

如果没有子目录,也可以取

ls | xargs -I {} dos2unix "{}"

我认为最简单的方法是:

dos2unix $(find . -type f)

一个常见的用例似乎是将提交到Git存储库的所有文件的行结束符标准化:

git ls-files -z | xargs -0 dos2unix

请记住,某些文件(例如*。sln, *.bat)只在Windows操作系统上使用,并且应该保持CRLF结尾:

git ls-files -z '*.sln' '*.bat' | xargs -0 unix2dos

如有必要,使用.gitattributes