如何检测文件类型?

时间:2013-02-20 00:18:05

标签: ruby file-type

file命令表示文件类型,但如果文件是文本,则表示“ASCII文本”。但是,我想要发现它的类型是什么,例如Ruby脚本,Python脚本,C ++文件等。我想用Ruby做到这一点。

2 个答案:

答案 0 :(得分:2)

你不能可靠地做到这一点。

但是,您可以通过查看第一个(hashbang) line中的解释器名称来确定。 (例如#!/usr/bin/python#!/usr/bin/env ruby等。)

然而,一般而言,不可能可靠地进行。例如,请考虑以下程序:

print "Hello, World!"

是Python吗?还是Ruby?还是Perl? - 这是所有这些语言的有效课程!

答案 1 :(得分:1)

你不能可靠地做到这一点,但是你可以得到的最接近的是查看程序在语法上是否对于给定语言是正确的。请注意,这会产生误报! print "Hello, World!"的{​​{3}}是一个,因为琐碎的空文件案例(可能所有语法检查器都会正常传递)。你可以通过猜测只有一个语法检查器说它没关系来减少这个。

以下是如何仅使用您提供的语言检查语法(更多信息,@maerics’s example是一个很好的参考):

  • C ++:$CC -x c++ -fsyntax-only myfile(用您喜欢的编译器替换$CC,此命令与Clang& GCC兼容。)

  • Ruby:ruby -c myfile

  • Python:python -m py_compile myfile

通常你可以检查这个命令的退出代码,在Ruby中你可以通过传递命令运行到Syntastic Vim plugin并检查返回值是否为真来完成。