4

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

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

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

JPEG image data, JFIF standard 1.01
4

2 回答 2

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;
      } 

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

于 2015-12-14T00:30:17.443 回答
3

原则上不存在“二进制”或“文本”文件之类的东西——所有文件都只是一个字节序列。

大多数尝试检测它们的程序只是使用某种启发式方法来排除包含不常见的文本字符(通常,字符 < 32)或不包含通常在文本中找到的字符的文件(例如,空格,如图所示@Andrey 的回答)。

这只是对您的一种善意,以避免意外错误,但“不提供任何形式的保证”,因为完全有可能拥有仅使用 ASCII 字符的“二进制”文件(例如,PPM 和 COM 文件很容易构建通过上述测试)。

于 2015-12-14T00:39:58.747 回答