检查文件是否是 UNIX 文件,如果为 true,则设置一个位



我想创建一个shell文件来查找文件是Unix还是Dos文件类型。使用 IF 查询,我想在检查文件是否需要使用"dos2unix"进行转换后决定。我知道命令"FILE",但返回值不是布尔数据类型,它是一个字符串。

那么,如果文件是 unix 文件类型,有没有办法将布尔位设置为 true?

提前感谢...!

您可以解析file命令的输出。对于具有 行结尾的文本文件,它输出 ASCII text ... ,而对于具有 \r 行结尾的文本文件,它输出 ASCII text ... with CRLF line terminators 。请注意,根据实际文件内容,可以使用其他信息代替"..."。因此,您可以做类似的事情

file YOURFILE | grep -q '^ASCII text.*with CRLF'
((is_dos_text_file=1-$?))

变量 is_dos_text_file 包含值 1,如果 YOURFILE 被文件判断为带有 CRLF 结尾的文本文件。如果 YOURFILE 具有 Unix 行尾,或者未被判断为文本文件,则为 0。

更新:我刚刚注意到您在帖子中使用了shell标签,因此搜索Posix Shell解决方案。在这种情况下,不能使用 ((...)) 构造,您必须执行以下操作

if file YOURFILE | grep -q '^ASCII text.*with CRLF'
then
  is_dos_text_file=1 # true
else
  is_dos_text_file=0 # false
fi

以获得相同的效果。

您可以将文件转换为 Unix 文件并检查它是否仍然相同。在这种情况下,它是一个Unix文件。否则它是一个DOS文件。

echo unix > unix-file
echo dos | unix2dos > dos-file
for file in {dos,unix}-file; do
  if cmp -s $file <(dos2unix < $file); then
    echo $file is a unix file
  else
    echo $file is a dos file
  fi
done

相关内容

最新更新