내 장치의 사용 권한 정책이 약간 편집 적이기 때문에 (응용 프로그램 데이터 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
때문에 나는이 유틸리티가 누락 된 일부 장치에 안드로이드를위한 경량 find
의 소스를 제공합니다. myfind
대신 장치에 정의 된 경우 find
을 사용할 수 있습니다.
설치 :
$ adb push copy-r /sdcard/
adb shell
내에서 실행 (뿌리) :
# . /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()에 : 나는해야했다. 사람이 아닌 뿌리 전화 adb shell
액세스 할 수 있도록 응용 프로그램의 디렉토리를 보호 해제 코드를 필요로 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);
}
}
어떤 알 수없는 이유로 나는 읽을 수는 있지만 쓸 수 있지만.
제공된 솔루션 중 어떤 것이 효과가 있습니까? – gnclmorais
@MEGA : 내가 말했듯이, adb가 설치되어 있지 않습니다. "cat src> dst"명령을 사용하여 복사 할 수 있지만 재귀 적으로 만드는 방법을 모릅니다. – psihodelia
나는 그것을 얻지 않는다. 쉘에 액세스하려면'./adb shell'을 입력하십시오. 'adb '를 사용할 수 없다는 말을 들으면 쉘에 어떻게 접근 할 수 있습니까? – gnclmorais