检查文件是否为unix文件,如果设置为true,则设置一点

时间:2019-04-29 16:31:02

标签: linux shell unix

我想创建一个外壳文件,查找文件是Unix还是Dos文件类型。使用IF查询时,我想在检查文件是否需要使用“ dos2unix”进行转换后做出决定。我知道命令“ FILE”,但是返回值不是BOOLEAN数据类型,它是一个字符串。

那么如果文件是UNIX文件类型,有什么方法可以将BOOLEAN位设置为true吗?

预先感谢...!

2 个答案:

答案 0 :(得分:1)

您可以解析fn test_a(a : &TraitA){ a.say_hello(); } fn test_b(b : &TraitB){ b.say_hello(); } fn main() { let c: Box<dyn TraitC> = Box::new(MyType{}); TraitA::say_hello(&*c); TraitB::say_hello(&*c); c.as_trait_a().say_hello(); c.as_trait_b().say_hello(); test_a(c.as_trait_a()); test_b(c.as_trait_b()); let a : &dyn TraitA = c.as_trait_a(); a.say_hello(); let b : &dyn TraitB = c.as_trait_b(); b.say_hello(); } 命令的输出。对于具有\ n行尾的文本文件,其输出file,而对于具有\ r \ n行尾的文本文件,其输出ASCII text ...。请注意,根据实际的文件内容,可能会有其他信息代替“ ...”。因此,您可以做类似

的操作
ASCII text ... with CRLF line terminators

如果文件将YOURFILE判断为带有CRLF结尾的文本文件,则变量file YOURFILE | grep -q '^ASCII text.*with CRLF' ((is_dos_text_file=1-$?)) 包含值1。如果YOURFILE具有Unix行结尾,或未被判断为文本文件,则为0。

更新:我刚刚注意到您在帖子中使用了 shell 标记,因此搜索了Posix Shell解决方案。在这种情况下,无法使用is_dos_text_file构造,而您必须做类似的事情

((...))

获得相同的效果。

答案 1 :(得分:0)

您可以将文件转换为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