0

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

4

1 回答 1

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
        );

不是很好,但这是我(目前)找到的唯一解决方案。

于 2013-06-20T11:01:55.300 回答