如何检查文件在node.js中是否可执行?

时间:2013-04-28 01:20:03

标签: node.js filesystems

如何检查文件在node.js中是否可执行?

也许像

fs.isExecutable(function (isExecutable) {

})

5 个答案:

答案 0 :(得分:8)

仅依赖于内置fs模块的另一个选项是使用fs.accessfs.accessSync。此方法比获取和解析文件模式更容易。一个例子:

const fs = require('fs');

fs.access('./foobar.sh', fs.constants.X_OK, (err) => {
    console.log(err ? 'cannot execute' : 'can execute');
});

答案 1 :(得分:7)

您可以使用fs.stat调用。

fs.stat调用会返回fs.Stats个对象。

该对象是mode属性。该模式将告诉您文件是否可执行。

就我而言,我创建了一个文件并执行了chmod 755 test_file,然后通过以下代码运行它:

var fs = require('fs');
test = fs.statSync('test_file');
console.log(test);

我为test.mode得到的是33261。

This link有助于将mode转换回等效的unix文件权限。

答案 2 :(得分:3)

看看https://www.npmjs.com/package/executable它甚至有一个.sync()方法

executable('bash').then(exec => {
    console.log(exec);
    //=> true 
});

答案 3 :(得分:2)

在Node中,fs.stat方法返回fs.Stats对象,您可以通过fs.Stats.mode属性获取文件权限。来自这篇文章:Nodejs File Permissions

答案 4 :(得分:0)

此版本功能更全面。但是它确实依赖于whichwhere,它们是特定于操作系统的。这包括Windows和Posix(Mac,Linux,Unix,Windows(如果暴露了Posix层或安装了Posix工具)。

const fs = require('fs');
const path = require('path');
const child = require("child_process");

function getExecPath(exec) {
  let result;
  try {
    result = child.execSync("which " + exec).toString().trim();
  } catch(ex) {
    try {
      result = child.execSync("where " + exec).toString().trim();
    } catch(ex2) {
      return;
    }
  }
  if (result.toLowerCase().indexOf("command not found") !== -1 ||
      result.toLowerCase().indexOf("could not find files") !== -1) {
    return;
  }
  return result;
}    


function isExec(exec) {
  if (process.platform === "win32") {
    switch(Path.GetExtension(exec).toLowerCase()) {
      case "exe": case "bat": case "cmd": case "vbs": case "ps1": {
        return true;
      }
    }
  }
  try {
    // Check if linux has execution rights
    fs.accessSync(exec, fs.constants.X_OK);
    return true;
  } catch(ex) {
  }
  // Exists on the system path
  return typeof(getExecPath(exec)) !== 'undefined';
}