我需要为我的应用程序每天清理一个文件夹,所以我制作了一个 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
我正在尝试使用 exec,但我不认为这是问题所在,因为生成的 rm 似乎无法解释扩展的 glob 事物,默认情况下它是活动的...
编辑:作为一种解决方法,我正在尝试执行一个 sh 脚本,该脚本将使用与我启动它的参数一样多的参数来启动此命令,以便文件保留。这不是我想要的,但现在我只需要一些可以工作的东西。