使用RM与节点JS扩展的通配(Using rm with extended globbing in

2019-10-18 15:49发布

我需要做的文件夹的日常清理我的应用程序,所以我已经做了一个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唐吨解释扩展水珠的东西,它默认是活动...

编辑:作为一种变通方法,我想要做一个sh脚本这将启动与尽可能多的参数,我的文件,以保持其启动此命令。 这不是因为我想它,但现在我只是需要一些东西,会工作。

Answer 1:

试着改变你的线路:

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


文章来源: Using rm with extended globbing in node js