首页 > 解决方案 > 使用 Node.js 中的 linux 命令删除和复制所有文件

问题描述

我正在尝试spawnNode.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 脚本,然后将其作为节点子进程的一部分运行

标签: node.js

解决方案


在浪费了我的时间 2-3 小时后。我发现如果我更改spawnexec(从同一个包导入 - 'child_process'),它工作得很好。

例如:

exec('rm -rf *', {cwd: '...'});
exec('cp ./dir1/* ./', {cwd: '...'});

我仍然不知道为什么它不起作用spawn。如果有人知道确切答案,请随时添加另一个答案。


推荐阅读