dos2unix 修改二进制文件 - 为什么

But*_*kus 4 dos2unix line-endings centos6

默认情况下,它不应该影响二进制文件。

我在一个带有图像的文件夹中对其进行了测试,虽然大多数图像没有受到影响,但有一些是。如果dos2unix无法从文本文件中分辨出二进制文件,我是否必须特别包括和/或排除某些文件扩展名才能使其正常工作?

注意:当我file image.jpg在任何 jpg 上运行时,无论它是否被修改,结果都是:

JPEG image data, JFIF standard 1.01
Run Code Online (Sandbox Code Playgroud)

And*_*rey 5

这是 dos2unix 程序源代码的相关部分:

if ((ipFlag->Force == 0) &&
      (TempChar < 32) &&
      (TempChar != 0x0a) &&  /* Not an LF */
      (TempChar != 0x0d) &&  /* Not a CR */
      (TempChar != 0x09) &&  /* Not a TAB */
      (TempChar != 0x0c)) {  /* Not a form feed */
        RetVal = -1; 
        ipFlag->status |= BINARY_FILE ;
        if (ipFlag->verbose) {
          if ((ipFlag->stdio_mode) && (!ipFlag->error)) ipFlag->error = 1;
          d2u_fprintf(stderr, "%s: ", progname);
          d2u_fprintf(stderr, _("Binary symbol 0x00%02X found at line %u\n"),TempChar, line_nr);
        }
        break;
      } 
Run Code Online (Sandbox Code Playgroud)

看来,如果文件有其他控制字符,则将其视为二进制文件并跳过,否则将其作为文本文件处理。因此,如果二进制文件(例如图像)不包含这些字符,它将被损坏。