Javascript 节点js子进程删除多个文件
我正在尝试设置node.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
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分钟,即可接受:)