我必须使用转换整个目录dos2unix
。我不知道该怎么做。
我必须使用转换整个目录dos2unix
。我不知道该怎么做。
Answers:
find . -type f -print0 | xargs -0 dos2unix
将递归地查找当前目录中的所有文件,并调用这些文件dos2unix命令
\;; echo Hello
find
调用不会执行此检查(尽管添加起来很简单),但是现代程序会dos2unix
正确跳过二进制文件。
如果目录很大,则可能要考虑在多个处理器上运行:
find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix
一次将传递1个文件,并使用4个处理器。
n
提高一个或两个数量级(取决于我们在此处讨论的文件数量)
由于恰好对dos2unix不满意,我推出了自己的简单实用程序。除了在速度和可预测性方面的一些优势外,语法也更加简单:
endlines unix *
如果您希望它进入子目录(跳过隐藏的目录和非文本文件):
endlines unix -r .
endlines
可以在这里https://github.com/mdolidon/endlines
dos2unix
?真是好奇。
dos2unix
不同的功能,它们具有不同的功能(例如,有些读取UTF32,而有些则没有;结束线则没有)。只有一种endlines
功能是众所周知的。2 /输入自由,并非全部dos2unix
。3 /高效的文件树浏览,旨在快速,实用地处理数以万计的文件。4 /在OSX上是开箱即用的-由于存在Brew软件包,因此它不再那么重要。
如果您的版本足够新或.git.
使用了find
,最好跳过隐藏的文件和文件夹,例如So而不是bash
使用zsh
,只需执行以下操作:
dos2unix **
请注意,对于Bash,这将需要:
shopt -s globstar
....但这是一个足够有用的功能,.bashrc
无论如何您都应该诚实地将其放入。
如果你不希望跳过隐藏的文件和文件夹,但你还是不想惹find
(和我也不会怪你),你可以提供第二递归水珠参数匹配只隐藏的条目:
dos2unix ** **/.*
请注意,在这两种情况下,全局文件都会扩展为包含目录,因此您将看到以下警告(可能多次出现): Skipping <dir>, not a regular file.
dos2unix
别名会影响参数的扩展方式。type dos2unix
您系统上的输出是什么?
**
替代find
是“跳过隐藏的文件和文件夹,如.git
”。dos2unix
永远不会看到隐藏的文件,因为**
不会展开以显示它们。如果你想自动运行dos2unix
的隐藏文件和文件夹,您可以使用find
或dos2unix ** **/.*
在**/.*
将扩大只隐藏的文件和文件夹,包括.
(根目录),..
在当前文件夹(父目录),以及任何其他隐藏的条目。
dos2unix
仅Skipping <dir>, not a regular file.
当在目录上运行时才进行打印,因此可以运行..
并且.
是安全的。)此外,ls
与glob 结合使用并不是检查glob如何扩展的好方法。echo
改为使用:echo **
将打印dos2unix
从接收的参数dos2unix **
。
**
隐含的内容有一个完全错误的想法,并且使用echo
它可以使之很清楚。
常见的用例似乎是标准化提交给Git信息库的所有文件的行尾:
git ls-files | xargs dos2unix
请记住,某些文件(例如*.sln
,*.bat
)等都是只使用在Windows操作系统中,应该保持的CRLF
结尾:
git ls-files '*.sln' '*.bat' | xargs unix2dos
如有必要,使用 .gitattributes
如果没有子目录,也可以
ls | xargs -I {} dos2unix "{}"
dos2unix *
它会更简单,并且实际上会更强大。(通常不建议将它的输出通过管道传递ls
,因为它是一种格式化工具,并且*
对于编程使用更为可靠。)
find . -type f -print0 | xargs -0 dos2unix
会解决我认为的问题。