簡體   English   中英

在節點js中使用rm和擴展的globing

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM