shell命令给child_process.spawn(command,,)node.js

基本上,我只是想在节点应用程序上运行rsync命令。

原始的rsync代码如下所示:

rsync -r -t -p -o -g -v --progress --delete -l -H /Users/ken/Library/Application Support/Sublime Text 3/Packages /Users/ken/Google Drive/__config-GD/ST3 

首先,我试了一下

 child_process.exec(command, [options], callback) 

但是,由于rsync输出很长,超出了缓冲区。

所以,我试了

 child_process.spawn(command, [args], [options]) 

相反,和stream.pipe出来。

 var spawn = require('child_process') .spawn; var ps = spawn(command1, args1) .stdout .pipe(process.stdout); 

虽然这个按预期工作,但是将每个原始的rsync命令拆分成spawn格式太难了。 (我从gRsync工具复制并粘贴命令)

有没有聪明的方法来做到这一点?

谢谢。

好的,这里是黑客;

在terminalshell和javascript /节点中将MacDirectory的空白区域变得非常棘手,所以我放置了_@_而不是\ ('\'+ whiteSpace)。

 (function() { 'use strict'; //,,,,,,,,,,,,,, var parseShCmd = function(cmd) { var cmdA = cmd.split(/ /); console.log(cmdA); var cmd1 = cmdA[0]; var args1 = []; cmdA.map(function(s, i) { if (i === 0) { console.log('-------------------'); //do nothing } else { args1[i - 1] = cmdA[i].replace(/_@_/g, ' '); } }); return [cmd1, args1]; }; var shCmd = 'rsync' + ' -r -t -p -o -g -v --progress --delete -l -H ' + '/Users/ken/Library/Application_@_Support/Sublime_@_Text_@_3/Packages ' + '/Users/ken/Google_@_Drive/__config-GD/ST3'; //var shCmd = 'ls -la'; var cmd1 = parseShCmd(shCmd); console.log(cmd1[0]); console.log(cmd1[1]); console.log('=================='); var spawn = require('child_process') .spawn; var ps = spawn(cmd1[0], cmd1[1]) .stdout .pipe(process.stdout); //,,,,,,,,,,,,,,,, }());