2013-08-16 107 views
2

我正在嘗試編寫一個android應用程序,用於將使用rsync和ssh的選定目錄中的Android設備數據備份到遠程主機。當我運行從亞行外殼rsync命令,如下所示,它的工作原理:Rsync和ssh在android上:沒有這樣的文件或目錄

rsync -rvz -e "/system/xbin/ssh -y -p 22" "/mnt/sdcard/" "[email protected]:backup/" 

但使用的Runtime.exec我的Java代碼失敗,一個錯誤,指出:

Error: rsync: failed to exec /system/xbin/ssh -y -p 22: No such file or directory (2) 

我使用的代碼是如下:

String[] commands = { 
    "rsync", "-rvz", "-e", "\"/system/xbin/ssh -y -p 22\"", 
    "\"/mnt/sdcard/\"", "\"[email protected]:backup/\"" 
}; 
Process process = Runtime.getRuntime().exec(commands); 

兩個rsync的和SSH,現已存放在/系統/ XBIN和chmoded爲755試圖與 「/系統/ XBIN/rsync的」 取代 「rsync的」,也但問題依然存在。這裏會有什麼問題?

回答

1

自己發現了這個問題。

當從shell上直接運行,報價有特定的含義,它們如下這裏需要:

rsync -rvz -e "ssh -y -p 22" "/path/to/src/" "/path/to/dest" 

我的Java代碼片斷上面嘗試運行的命令與報價逃了出來,像「\」 ARG \ 「」。但在外部使用時不需要引號。正確的用法是:

String[] commands = { 
    "/system/xbin/rsync", "-rvz", "-e", "/system/xbin/ssh -y -p 22", 
    "/mnt/sdcard", "[email protected]:backup/" 
}; 
0

我不確定,但可能問題是目標路徑([email protected]:backup /)不是絕對的?

另外,如果你在同一個設備上同步你的文件,也許你應該嘗試不使用SSH?並做這樣的事情:

rsync -rvz /mnt/sdcard/some_directory /backup 
+0

不,首次嘗試使用絕對路徑。同樣的錯誤。沒有與同一設備同步。它位於本地機器和仿真器之間,在與另一臺真實的遠程服務器連接之前進行測試。 – Rajeesh

+0

你得到的錯誤是realy,看起來好像你的/ system/xbin /目錄中沒有ssh文件,但是你寫的是在那個地方,並且你沒有得到任何權限錯誤。所以我沒有其他變體。 如果您運行 'Runtime.getRuntime()。exec(「rsync -rvz -e'/ system/xbin/ssh -y -p 22'/ mnt/sdcard/[email protected]:/ backup /」)會怎麼樣? ' – cooperok

相關問題