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


当前回答

我已经在谷歌上搜索过上百万次了,所以我的解决方案是把这个bash函数放到你的环境中。

。bashrc或。profile之类的

dos2unixd() {
  find $1 -type f -print0 | xargs -0 dos2unix
}

使用

$ back2unixd ./somepath

这样,您仍然有原来的命令dos2unix,并且很容易记住这个命令dos2unixd。

其他回答

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

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

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

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

最好跳过隐藏的文件和文件夹,比如.git。所以,如果你的bash版本是最近的,或者你正在使用zsh,而不是使用find,只需执行:

dos2unix **

注意,对于Bash,这将需要:

shopt -s globstar

....但这是一个非常有用的功能,你应该把它放在你的。bashrc中。

如果你不想跳过隐藏的文件和文件夹,但你仍然不想打乱find(我不会责怪你),你可以提供第二个递归glob参数来只匹配隐藏的条目:

dos2unix ** **/.*

注意,在这两种情况下,glob都将扩展到包含目录,因此您将看到以下警告(可能多次):

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

git ls-files -z | xargs -0 dos2unix

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

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

如有必要,使用.gitattributes

我也遇到过同样的问题,感谢这里的帖子,我已经解决了它。我知道我有大约100个文件,我只需要为*.js文件运行它。 找到。-type f -name '*.js' -print0 | xargs -0 dos2unix . xml

谢谢大家的帮助。