私のデバイスのアクセス許可ポリシーは、少し編集的です(adb pull
アプリケーションデータできません)ので、ファイルを再帰的にコピーするスクリプトを作成しました。
注:この再帰的なファイル/フォルダのコピースクリプトは、Android用です!
コピー-R:
ここ
#! /system/bin/sh
src="$1"
dst="$2"
dir0=`pwd`
myfind() {
local fpath=$1
if [ -e "$fpath" ]
then
echo $fpath
if [ -d "$fpath" ]
then
for fn in $fpath/*
do
myfind $fn
done
fi
else
: echo "$fpath not found"
fi
}
if [ ! -z "$dst" ]
then
if [ -d "$src" ]
then
echo 'the source is a directory'
mkdir -p $dst
if [[ "$dst" = /* ]]
then
: # Absolute path
else
# Relative path
dst=`pwd`/$dst
fi
cd $src
echo "COPYING files and directories from `pwd`"
for fn in $(myfind .)
do
if [ -d $fn ]
then
echo "DIR $dst/$fn"
mkdir -p $dst/$fn
else
echo "FILE $dst/$fn"
cat $fn >$dst/$fn
fi
done
echo "DONE"
cd $dir0
elif [ -f "$src" ]
then
echo 'the source is a file'
srcn="${src##*/}"
if [ -z "$srcn" ]
then
srcn="$src"
fi
if [[ "$dst" = */ ]]
then
mkdir -p $dst
echo "copying $src" '->' "$dst/$srcn"
cat $src >$dst/$srcn
elif [ -d "$dst" ]
then
echo "copying $src" '->' "$dst/$srcn"
cat $src >$dst/$srcn
else
dstdir=${dst%/*}
if [ ! -z "$dstdir" ]
then
mkdir -p $dstdir
fi
echo "copying $src" '->' "$dst"
cat $src >$dst
fi
else
echo "$src is neither a file nor a directory"
fi
else
echo "Use: copy-r src-dir dst-dir"
echo "Use: copy-r src-file existing-dst-dir"
echo "Use: copy-r src-file dst-dir/"
echo "Use: copy-r src-file dst-file"
fi
このユーティリティが欠落している一部のデバイスであるため、私は、Android用の軽量find
の源を提供します。 myfind
の代わりにfind
がデバイスに定義されている場合は、それを使用できます。
インストール:adb shell
内で実行
$ adb push copy-r /sdcard/
(根ざし):.
コマンドである
# . /sdcard/copy-r files/ /sdcard/files3
又は
# source /sdcard/copy-r files/ /sdcard/files3
(上記ハッシュ#
は、プロンプトsu
ありますシェルを実行させる指定されたファイルは、source
とほとんど同じです)。
コピーした後、私はadb pull
のファイルをsdカードから取得できます。
ファイルをアプリディレクトリに書き込むのが厄介で、files
とそのサブディレクトリのr/wパーミッションを設定しようとしましたが、うまく動作しませんでした(うまく読み込めませんでしたが、
String[] cmdline = { "sh", "-c", "source /sdcard/copy-r /sdcard/files4 /data/data/com.example.myapp/files" };
try {
Runtime.getRuntime().exec(cmdline);
} catch (IOException e) {
e.printStackTrace();
}
アプリケーションののonCreate()に:私がしなければなりませんでした。
PSは、念のために誰かが、私は読み書きが、できなかったいくつかの未知の理由が
setRW(appContext.getFilesDir().getParentFile());
public static void setRW(File... files) {
for (File file : files) {
if (file.isDirectory()) {
setRW(file.listFiles()); // Calls same method again.
} else {
}
file.setReadable(true, false);
file.setWritable(true, false);
}
}
、非根ざし電話でadb shell
のアクセスを可能にするために、アプリケーションのディレクトリの保護を解除するためのコードを必要とします。
提供されているソリューションはどれですか? – gnclmorais
@MEGA:私が言ったように、adbはインストールされていません。私は "cat src> dst"コマンドを使ってコピーできますが、再帰的にする方法はわかりません。 – psihodelia
私はそれを取得しません。シェルにアクセスするには、 './adb shell'と入力します。あなたが 'adb'を利用できないと言っているなら、どのようにシェルにアクセスできますか? – gnclmorais