如何检查文件在node.js中是否可执行?
也许像
fs.isExecutable(function (isExecutable) {
})
答案 0 :(得分:8)
仅依赖于内置fs
模块的另一个选项是使用fs.access或fs.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)
此版本功能更全面。但是它确实依赖于which
或where
,它们是特定于操作系统的。这包括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';
}