是否有任何c ++函数来检查特定路径中给出的文件是否是脚本(.sh)文件

时间:2011-09-29 13:55:04

标签: c++ unix

其中一个目录中有.sh文件 例如:path = /opt/WD/CD/SCD/temp.sh

是否有任何函数是c ++来检查该位置(路径)中的文件是否是脚本(.sh)文件

bool ValidCommand(const string & path)
{
bool return = true;

    {
    if (!access(path.c_str(),X_OK))
    {
        return = true;
    }
    else
        return = false;
 }

path = /opt/WD/CD/SCD/temp.sh

访问对我不起作用:(

4 个答案:

答案 0 :(得分:1)

看看

  • stat - 检查可执行位
  • libmagic - 从(a.o.)hash-bang行检测文件类型

答案 1 :(得分:0)

也许stat可以满足您的需求,否则您可以查看file的来源,看看它是如何做到的。

答案 2 :(得分:0)

您可以使用stat。如果失败(返回-1),则该文件不存在。

答案 3 :(得分:0)

你想要它有多精确?阅读起来相当简单 目录并查找以.sh结尾的文件名。 (boost::filesystem拥有你需要的一切。)但当然, 如果我愿意,我可以命名我的C ++标题file.sh(并且有点 乖张)。一个更准确的测试将涉及阅读 文件的开头:如果前两个字节是"#!",那么它可能是一个 某种脚本,如果第一行匹配 "#!\\s*(?:/usr)?/bin/sh/[a-z]*sh",那么你几乎可以肯定它是一个外壳 脚本。删除[a-z]*,它是Bourne或Posix shell脚本。