2013-08-06 3 views
2

В принципе, я просто хочу запустить команду rsync в приложении узла.Команда оболочки для child_process.spawn (команда, [args], [options]) node.js

Необработанные код 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 формату икру. (Я скопировал и вставил команду из инструмента gRsync)

Есть ли способ для этого?

Спасибо.

+0

ОК, я нашел ответ, разместив позже –

ответ

1

Хорошо, вот взломать;

Выйти из белого пространства MacDirectory в терминальной оболочке и javascript/node очень сложно, поэтому я разместил [email protected]_ вместо \ ('\' + 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(/[email protected]_/g, ' '); 
      } 
     }); 
     return [cmd1, args1]; 
    }; 

    var shCmd = 'rsync' + 
     ' -r -t -p -o -g -v --progress --delete -l -H ' + 
     '/Users/ken/Library/[email protected]_Support/[email protected][email protected]_3/Packages ' + 
     '/Users/ken/[email protected]_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); 

    //,,,,,,,,,,,,,,,, 
}()); 
Смежные вопросы