我必须使用dos2unix转换整个目录。我不知道该怎么做这件事。
如果它是一个大目录,你可能需要考虑运行多个处理器:
find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix
这将一次传递一个文件,并使用4个处理器。
由于我对dos2unix不太满意,所以我推出了自己的简单实用程序。除了在速度和可预测性方面的一些优势外,语法也更简单:
endlines unix *
如果你想让它进入子目录(跳过隐藏的dirs和非文本文件):
endlines unix -r .
Endlines可以在这里找到https://github.com/mdolidon/endlines
对于任何Solaris用户(我使用5.10,可能也适用于更新版本,以及其他unix系统):
Dos2unix不会默认覆盖文件,它只会将更新后的版本打印到stdout,所以你必须指定源和目标,即相同的名称两次:
find . -type f -exec 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
谢谢大家的帮助。
我已经在谷歌上搜索过上百万次了,所以我的解决方案是把这个bash函数放到你的环境中。
。bashrc或。profile之类的
dos2unixd() {
find $1 -type f -print0 | xargs -0 dos2unix
}
使用
$ back2unixd ./somepath
这样,您仍然有原来的命令dos2unix,并且很容易记住这个命令dos2unixd。
推荐文章
- 如何在Linux中循环目录?
- 如何确定一个进程是否运行在lxc/Docker内部?
- 仅在文件不存在时才将行追加到文件中
- 如何强制makefile重新构建目标?
- 如何在父进程退出后使子进程死亡?
- 从URL执行bash脚本
- [: shell编程中的意外操作符
- 在Unix中,我可以在一个目录中运行'make'而不首先cd'到该目录吗?
- 如何从命令行重置Jenkins安全设置?
- 如何查看Linux共享库正在导出的函数列表?
- 在Docker Alpine容器中启动一个shell
- 快速unix命令显示文件中间的特定行?
- fork(), vfork(), exec()和clone()的区别
- 在tmux中保持窗口名称固定
- 如何生成一个核心转储在Linux上的分段错误?