基本上,我只想在节点app上运行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 out。
var spawn = require('child_process')
.spawn;
var ps = spawn(command1, args1)
.stdout
.pipe(process.stdout);
虽然这可以按预期工作,但是将每个原始rsync命令拆分为spawn格式太难了。 (我从gRsync工具复制并粘贴命令)
有聪明的方法吗?
感谢。
答案 0 :(得分:1)
好的,这是黑客攻击;
在终端shell中转义MacDirectory的空白区域并且javascript / node非常棘手,所以我放置了_@_
而不是\
('\'+ 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);
//,,,,,,,,,,,,,,,,
}());