手册页的dos2unix
状态:
Binary files are automatically skipped, unless conversion is forced.
...
-f, --force
Force conversion of binary files.
如果您在包含特殊符号(例如垂直制表符)的文件上运行dos2unix
时没有该标志,则它将失败并显示以下消息:-f
dos2unix: Binary symbol found at line 123
dos2unix: Skipping binary file foo.csv
我的问题是,如果遇到带有特殊符号的文件,为什么默认行为会dos2unix
假设用户犯了错误?是否只是出于谨慎考虑,用户可能会在真正的二进制文件上运行此文件并损坏它?
答案1
这样做是因为,虽然dos2unix
知道文本文件中的两个字符0x0d0a
是 DOS/Windows 用于行尾的字符,并且应该替换为0x0a
Unix/Linux 行尾,但还不是很清楚对于“二进制”文件。
“二进制”文件可以是可执行文件、存档、数据库、来自某些未知程序的数据文件或前述文件的压缩版本。它们可能包含一对包含十进制值的数据字节,0x0d0a
甚至是一条 CPU 指令。short int
3338
只需在这些文件中替换0x0d0a
为就会破坏它们(使它们不起作用)。0x0a
由于这通常是一个坏主意,dos2unix
因此默认情况下不会这样做。
但是,由于 Unix 方式是假设人们知道自己在做什么(如果你愿意的话,搬起石头砸自己的脚),并且dos2unix
在检测“二进制”方面并不完美,所以在出现误报的情况下可以进行覆盖。
答案2
为什么你会在二进制文件上运行它吗?随机希望每一个都0x0d0a
应该是0x0a
?它是为 ASCII 文本文件设计的;我不确定它是否能处理 Unicode。作为一种保护措施,它可以阻止您损坏二进制文件。