在节点js中使用rm和扩展的globbing

我需要每天清理我的应用程序的文件夹,所以我做了一个bash脚本(在超级用户的帮助下)这样做。

它从控制台运行良好,但不能从节点正确解释。

这里的工作脚本:

rm ./app/download/!("test1"|"test4"); 

我以为会在node.js中像这样工作:

  var spawn = require('child_process').spawn, PATH = process.argv[1].substr(0, process.argv[1].lastIndexOf('/') + 1), //Get the full path to the directory of the app arg = [PATH + 'download/!(\"', 'test1', '\"|\"', 'test4', ('\")'], child = spawn ('rm', arg); child.stderr.on('data', function(data) { console.log('stderr:' + data); }); 

但我得到rm解释他们是不同的文件:

  stderr:rm: cannot remove '/home/user/app/download("' : No such file or directory rm cannot remove 'test1' : No such file or directory ... 

所以我试图通过改变这个arg:

  arg = [PATH + 'download/!("' + 'test1' + '"|"' + 'test4' + '")'] 

但是我明白了

  stderr:rm: cannot remove '/home/user/app/download/!("test1"|"test2")' : No such file or directory 

我尝试与可执行文件,但我不认为这是问题,因为它似乎产生的rm不解释扩展glob的东西,默认情况下是活跃的…

编辑:作为一种解决方法,我m试图做一个sh脚本,将开始这个命令与许多参数,我开始与文件保持。 这不是我想要的,但现在我只需要一些可以工作的东西。

尝试改变你的线路:

  arg = ['-c', "shopt -s extglob\nshopt -s nullglob\nrm " + PATH + 'download/!("test1"|"test4")'], child = spawn ('bash', arg);