[英]Using rm with extended globbing in node js
我需要每天為我的應用程序清理文件夾,因此我已經制作了一個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生成的rm不能解釋擴展的glob事物,默認情況下它是活動的...
編輯:作為一種解決方法,我試圖做一個sh腳本,它將使用與啟動該命令一樣多的參數來啟動此命令,以保留該文件。 這不是我想要的,但是現在我只需要一些可以使用的東西。
嘗試將行更改為:
arg = ['-c', "shopt -s extglob\nshopt -s nullglob\nrm " + PATH + 'download/!("test1"|"test4")'],
child = spawn ('bash', arg);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.