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

Javascript 在节点js中使用rm和扩展的globbing,javascript,node.js,bash,rm,Javascript,Node.js,Bash,Rm,我需要为我的应用程序每天清理一个文件夹,所以我制作了一个bash脚本(在超级用户的帮助下)来完成这项工作 它在控制台中运行良好,但在节点中无法正确解释 以下是工作脚本: rm ./app/download/!("test1"|"test4"); 我认为在node.js中会像这样工作: var spawn = require('child_process').spawn, PATH = process.argv[1].substr(0, process.argv[1].lastInd

我需要为我的应用程序每天清理一个文件夹,所以我制作了一个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);
 });
但我通过不同的文件来解释它们:

 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
我正在尝试使用exec,但我认为这不是问题所在,因为生成的rm似乎不解释扩展的glob,它在默认情况下是活动的


编辑:作为一种解决方法,我正在尝试执行一个sh脚本,该脚本将使用我启动该命令时使用的尽可能多的参数来启动该命令,以便文件保持不变。这不是我想要的,但现在我只需要一些有用的东西。

尝试将您的行更改为:

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

尝试将您的行更改为:

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

shell可能不会解释文本形式。此外,一些bash实例在默认情况下没有扩展模式,因此您必须使用它来调用它。请检查我的答案。shell可能不会解释字面形式。此外,一些bash实例在默认情况下没有扩展模式,因此您必须使用它来调用它。请检查我的答案。很抱歉,我的答案太晚了,我正试着和exec交流(没有成功)。有了这个,我得到了bash:-c:line 0:syntax error靠近意外标记('bash:-c:line 0:'shopt-s extglob;rm/home/user/app/download/!)('test1'|“test4”)“。但自从启动bash以来,它仍然领先了一步。@DrakaSAN我发现了问题。似乎extglob将在下一行激活,而不是在命令仅用分号分隔的当前行。因此,我们使用换行符来分隔命令。我希望它现在对您有效。请单击复选框M接受答案。”ark当它出现时,谢谢。尝试过之后,我得到rm:无法删除“/home/user/app/download/!(test1 | test4)”:没有这样的文件或目录。奇怪的是,即使使用\“it don't keep The”也不例外。@DrakaSAN请查看更新。至少我们可以测试extglob是否真的有效。@DrakaSAN看起来extglob可以工作和/home/user/app/download/!(test1 | test4)实际上与任何内容都不匹配。你能检查一下文件是否真的存在吗?很抱歉回答得太晚,我正在尝试使用exec(未成功)。通过此操作,我得到了bash:-c:line 0:syntax error near unexpected token'('bash:-c:line 0:'shopt-s extglob;rm/home/user/app/download/)('test1“|”test4”)“。但自从启动bash以来,它仍然领先了一步。@DrakaSAN我发现了问题。似乎extglob将在下一行激活,而不是在命令仅用分号分隔的当前行。因此,我们使用换行符来分隔命令。我希望它现在对您有效。请单击复选框M接受答案。”ark当它出现时,谢谢。尝试过之后,我得到rm:无法删除“/home/user/app/download/!(test1 | test4)”:没有这样的文件或目录。奇怪的是,即使使用\“it don't keep The”也不例外。@DrakaSAN请查看更新。至少我们可以测试extglob是否真的有效。@DrakaSAN看起来extglob可以工作和/home/user/app/download/!(test1 | test4)实际上什么都不匹配。你能检查一下这些文件是否真的存在吗?