注意:我需要在一行命令中直接使用它,因此 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标签因为我不确定平台的特定标志或类似的东西:)
答案 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
);
不是很好,但它是我发现的唯一解决方案(目前)。