fs mkdir/copy在受保护目录中间歇性失败,尽管有权限



我在Mac上有一个具有完整磁盘权限的电子应用程序。我正在使用fs在一个受保护的文件夹中创建一个目录,并将文件从临时文件夹复制到新目录。

使用fs.copy时,我定期得到两种不同类型的错误:

  • 如果该目录已经存在并且为用户所有:

    • EPERM错误(不允许操作,unlink xxx)当试图覆盖现有目录时,特别是在替换清单时。json文件。
  • 如果目录不存在或属于根目录:

    • 试图创建目录或将文件复制到新位置时出现EACCES错误。
  • 代码:

[...Array(sourceDirs.length).keys()].map(async (idx) => {
try {
await fs.ensureDir(destPaths[idx]);    
}
catch (e) {
console.log('Directory does not exist and could not be created');
}
try {
await fs.copy(sourceDirs[idx], destPaths[idx]);
}
catch (e) {
console.log('Copy error:', e);
}
});

经过更多的研究,我确定目录的R/W权限根据创建目录的实体而变化。目录及其子目录的某些元素为root所有,everyone仅具有读权限,而其他文件夹为everyone所有且具有写权限。

在编程上,解决这个问题的唯一方法是使用sudo生成chmod命令来更新权限。在我的例子中,获取目录的所有权没有任何问题。

最新更新