node.js - 使用 Node.js 中的 linux 命令删除和复制所有文件
问题描述
我正在尝试spawn
Node.js 的命令。
我试图在 Node.js 中模拟下面两个命令
rm -rf *
cp ../dir1/* ./
我的 Node.js 代码如下
spawn('rm', ['-rf', '*'], {cwd: '...'});
spawn('cp', ['./dir1/*', './'], {cwd: '...'});
它不工作。虽然我没有收到任何错误。
我的问题是 - 我错过了什么吗?还是出于任何安全原因被阻止?或者有什么解决方法吗?
输出:目录中的所有文件(由于ls
命令)。
编辑:
const PUBLIC_HTML_PATH = '....';
async function clearFBPublicFolder() {
return new Promise((resolve, reject) => {
const deleteCommand = spawn('rm', ['-rf', '*'], { cwd: PUBLIC_HTML_PATH });
console.log('Removing files from', PUBLIC_HTML_PATH);
deleteCommand.stdout.pipe(process.stdout);
deleteCommand.stderr.pipe(process.stdout);
deleteCommand.on('error', (err) => {
console.log(err);
reject(err);
});
deleteCommand.on('close', resolve);
deleteCommand.on('exit', function(code) {
console.log('Removing files: exit code (spawn)', code);
});
});
}
async function main() {
try {
await clearFBPublicFolder();
spawnSync('ls', { cwd: PUBLIC_HTML_PATH }).output.map((o) => console.log(o ? o.toString() : null));
} catch (error) {
console.log(error);
}
}
main();
一种解决方案我可以找到编写 shell 脚本,然后将其作为节点子进程的一部分运行
解决方案
在浪费了我的时间 2-3 小时后。我发现如果我更改spawn
为exec
(从同一个包导入 - 'child_process'),它工作得很好。
例如:
exec('rm -rf *', {cwd: '...'});
exec('cp ./dir1/* ./', {cwd: '...'});
我仍然不知道为什么它不起作用spawn
。如果有人知道确切答案,请随时添加另一个答案。
推荐阅读
- scala - 如何在终端中从 build.sbt 中获取值
- swift - 在不禁用屏幕报告的情况下防止 Firebase 记录“已启用分析屏幕报告”?
- python-3.x - 如何配置我的 Django 序列化程序以在其错误数组中返回验证错误,而不是引发异常?
- llvm - 列出 lldb 中断点周围的源
- localization - ASP.NET Core 3.1 MVC 中的本地化
- python - 如何在python中将异常转换为字符串
- python - 如何使用 selenium 抓取网站上生成的数据?
- python - IBM Cloud Functions Python API 打开本地文件浏览器以上传文件
- c++ - 在抽象基类中使用 typeid 来自动生成派生类名称。如何获得想要的结果?
- javascript - jquery 每个为 json