使用Node.js中的linux命令删除和复制所有文件

时间:2019-05-01 16:45:03

标签: node.js

我正在尝试使用Node.js的spawn命令。

我试图在Node.js中模拟下面的两个命令

rm -rf *
cp ../dir1/* ./

我的Node.js代码在下面

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

不起作用。虽然我没有任何错误。

我的问题是-我想念什么吗?还是出于安全原因被阻止?还是那里有任何解决方法?

enter image description here

输出:目录中的所有文件(由于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();

一个解决方案,我可以找到编写外壳脚本的程序,然后将其作为节点子进程的一部分运行

1 个答案:

答案 0 :(得分:0)

浪费2-3小时后,我的时间开始了。我发现如果将spawn更改为exec(从同一包-'child_process'导入),则可以正常工作。

例如:

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

我仍然不知道为什么它不适用于spawn。如果有人知道确切答案,请随时添加其他答案。