如何使用cp只复制某些子文件夹? [Android - root]

时间:2013-06-20 08:26:34

标签: android unix cp

注意:我需要在一行命令中直接使用它,因此 no script 是允许的! (我需要它为我的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标签因为我不确定平台的特定标志或类似的东西:)

1 个答案:

答案 0 :(得分: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
        );

不是很好,但它是我发现的唯一解决方案(目前)。