2013-06-20 57 views
0

注意:我需要直接在一行命令中使用,所以不允許使用腳本! (我需要它來創建我的Android應用程序解鎖裝置的臨時目錄)如何使用cp只複製某些子文件夾? [Android - root]

String cmd = "su | [ copy cmd here ] | chmod 777 data/ztemp"; 
Process ls = Runtime.getRuntime().exec(cmd); 

基本上我想複製的sared_prefs文件,但我需要保持在原來的app文件夾。

這是原來的結構

data 
|-data 
    |-app1 
    | |-shared_prefs 
    | | |-files 
    | |  
    | |-folder1 
    | +-folder2 
    | 
    |-app2 
     |-shared_prefs 
     | |-files 
     |  
     |-folder1 
     +-folder2 

,我想將它複製這樣

data 
|-ztemp 
    |-app1 
    | +-shared_prefs 
    |  |-files 
    | 
    |-app2 
     +-shared_prefs 
      |-files 

我已經試過cp data/*/shared_prefs/* ztemp/但我已經失去了文件夾。

先前的結果:

data 
|-ztemp 
    |-files 
    |-files 
    |-... 

提前感謝!

PS:我已經把Android的標籤,因爲我不知道該平臺或類似的東西:)

+0

您應該使用-r或-R在Linux中遞歸複製文件夾。 – Milan

+0

是的,我知道,但如何跳過不需要的文件夾?有時他們很沉重(通常是緩存文件夾),我不需要它們。 – Enrichman

回答

0

在我使用的腳本來處理這個年底的特定標誌(我不認爲有一個行命令做)

所以基本上我創造了這個SH

<!-- language: lang-sh --> 
#!/bin/sh 
DATA=/data/data 
TEMP=/data/ztemp; 

if [ ! -e ${TEMP} ] 
then 
     mkdir ${TEMP} 
fi 

for f in ${DATA}/*; 
do 
     PACKAGE="$(basename "$f")" 
     if [ -e ${DATA}/${PACKAGE}/shared_prefs ] 
     then 
       if [ ! -e ${TEMP}/${PACKAGE} ] 
       then 
         mkdir ${TEMP}/${PACKAGE} 
       fi 
       cp -r ${DATA}/${PACKAGE}/shared_prefs/* ${TEMP}/${PACKAGE} 
     fi 
done 

echo Finished! 

設備

private static void copyScript(Context context) { 

    FileOutputStream fos; 
    try { 
     InputStream is = context.getAssets().open(SCRIPT); 
     String content = convertStreamToString(is); 
     fos = context.openFileOutput(SCRIPT, Context.MODE_PRIVATE); 
     fos.write(content.getBytes()); 
     fos.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
內複製

和運行

rt = Runtime.getRuntime().exec(
       "su | chmod 777 " + SCRIPT_FOLDER + SCRIPT 
       + " | sh " + SCRIPT_FOLDER + SCRIPT 
       + " | chmod 777 " + SCRIPT_FOLDER + SCRIPT 
       + " | chmod -R 777 " + TEMP 
     ); 

不是真的不錯,但它是我發現了(現在)唯一的解決辦法。

相關問題