Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点js子进程删除多个文件_Javascript_Node.js_Child Process - Fatal编程技术网

Javascript 节点js子进程删除多个文件

Javascript 节点js子进程删除多个文件,javascript,node.js,child-process,Javascript,Node.js,Child Process,我正在尝试设置node.js子进程,以便通过终端删除多个文件。这在删除一个文件时有效,但在提供文件数组时失败 const spawnSync = require('child_process').spawnSync; var toDelete = array.join(' '); if (toDelete.length) { spawnSync('rm', ['-rf', toDelete ]); } 我认为最终会以rm-rf data/foo.txt data/b

我正在尝试设置node.js子进程,以便通过终端删除多个文件。这在删除一个文件时有效,但在提供文件数组时失败

const spawnSync = require('child_process').spawnSync;

var toDelete = array.join(' ');

  if (toDelete.length) {    
    spawnSync('rm', ['-rf', toDelete ]);
  }
我认为最终会以rm-rf data/foo.txt data/bar.txt的形式发送(当我在终端中输入时,它会工作)


…但是,我一定是做错了。

这是因为它将字符串作为单个参数传递给
rm-rf
,就像您在键入:

# rm -rf "data/foo.txt data/bar.txt" 
因为在Unix中空格是文件名的有效字符,所以它会尝试删除一个名为“data/foo.txt data/bar.txt”的文件

因此,您应该直接传递数组:

  if (toDelete.length) {    
    spawnSync('rm', ['-rf'].concat(toDelete));
  }

如果您在没有shell的情况下直接运行子进程,则不能用“”连接参数。啊。。。所以它不需要一个由多个参数组成的字符串?我用一个直接数组(无连接)进行了尝试,但也没有成功?
array.unshift('-rf');spawnSync('rm',数组)应该这样做。谢谢PSKocik-Alex刚刚击败了你。你的答案也行。太棒了!谢谢,谢谢你的解释。这一点非常有效-只要延迟5分钟,即可接受:)