93

を使用して複数のファイルをプルする最良の方法は何ですか

adb pull

/sdcard/次の名前の25個のファイルがあります。

gps1.trace
gps2.trace
...
gps25.trace

ワイルドカードは機能しません:

adb pull /sdcard/gps*.trace .
4

13 に答える 13

146

ワイルドカードを受け入れるコマンドxargsの結果を使用できます。adb shell lsこれにより、複数のファイルをコピーできます。面倒なことに、コマンドの出力には、adb shell lsを使用して削除できる改行制御文字が含まれていますtr -d '\r'

例:

# Using a relative path
adb shell 'ls sdcard/gps*.trace' | tr -d '\r' | xargs -n1 adb pull
# Using an absolute path 
adb shell 'ls /sdcard/*.txt' | tr -d '\r' | sed -e 's/^\///' | xargs -n1 adb pull
于 2012-06-28T17:40:53.313 に答える
105

adb pullファイルの代わりにディレクトリ名を受け取ることができ、その中のすべてのファイルを含むディレクトリをプルします。

/sdcard/gpsTraces ですべての GPS トレースを取得します

adb pull /sdcard/gpsTraces/ . 

adb pullおよびadb push再帰ディレクトリの例:

C:\Test>adb pull /data/misc/test/ .
pull: building file list...
pull: /data/misc/test/test1/test2/test.3 -> ./test1/test2/test.3
pull: /data/misc/test/test1/test2/test.2 -> ./test1/test2/test.2
pull: /data/misc/test/test1/test2/test.1 -> ./test1/test2/test.1
pull: /data/misc/test/test1/test.3 -> ./test1/test.3
pull: /data/misc/test/test1/test.2 -> ./test1/test.2
pull: /data/misc/test/test1/test.1 -> ./test1/test.1
pull: /data/misc/test/test.3 -> ./test.3
pull: /data/misc/test/test.2 -> ./test.2
pull: /data/misc/test/test.1 -> ./test.1
9 files pulled. 0 files skipped.
0 KB/s (45 bytes in 0.093s)

C:\Test>adb push . /data/misc/test/
push: ./test1/test2/test.3 -> /data/misc/test/test1/test2/test.3
push: ./test1/test2/test.2 -> /data/misc/test/test1/test2/test.2
push: ./test1/test2/test.1 -> /data/misc/test/test1/test2/test.1
push: ./test1/test.3 -> /data/misc/test/test1/test.3
push: ./test1/test.2 -> /data/misc/test/test1/test.2
push: ./test1/test.1 -> /data/misc/test/test1/test.1
push: ./test.3 -> /data/misc/test/test.3
push: ./test.2 -> /data/misc/test/test.2
push: ./test.1 -> /data/misc/test/test.1
9 files pushed. 0 files skipped.
0 KB/s (45 bytes in 0.062s)
于 2012-10-01T18:15:43.127 に答える
27

./adb pull /sdcard <-- 失敗

./adb pull /sdcard/ <-- 再帰的に動作します - 末尾のスラッシュに注意してください

2014 年 3 月にダウンロードした Nexus 5 と adb でテスト済み。

于 2014-03-11T10:58:10.367 に答える
6

これは Windows ボックス用に作成しました。ファイルシステムをマウントせずにワイルドカードを使用してファイルを転送すると非常に便利です。このスクリプトをパス env のどこかに含めることができます。

adbpull.bat

@echo off
setlocal enabledelayedexpansion
if %1.==. (
    echo Wilcard parameter is required.
    goto end
)
for /F "tokens=* USEBACKQ" %%F in (`adb shell ls %1`) do (
    set text=%%F
    set mfile=!text:~0,-1!
    adb pull "!mfile!"
)
:end
endlocal

例: adbpull /sdcard/DCIM/Camera/IMG_2016*

于 2016-08-18T10:52:40.500 に答える
6

adb pullコマンドはリモート パラメーターのフォルダー名を受け入れ始めましたが、それでもコマンドを使用することを好みますtar。柔軟性が向上します。ファイル名のパターン ( includeexcludeの両方)、シンボリック リンクの制御、ファイルのアクセス許可の保持が可能です。Android 6.0以降、組み込みを使用できます。それ以前は、次のようなサードパーティ ツールを使用する必要がありましたbusybox

adb exec-out tar c sdcard/amazonmp3 > amazon.tar

/パスの先頭は必ず省略してください。

于 2013-02-18T10:57:54.297 に答える
4

LinuxまたはMacを使用している場合は、AndroidDebugBridge用のFUSEファイルシステムをADBFSします。

于 2012-06-17T20:50:52.157 に答える
3

ディレクトリのプルは、新しい Android ツールで利用できます。(どのバージョンから追加されたのかはわかりませんが、最新の ADT 21.1 で動作しています)

adb pull /sdcard/Robotium-Screenshots
pull: building file list...
pull: /sdcard/Robotium-Screenshots/090313-110415.jpg -> ./090313-110415.jpg
pull: /sdcard/Robotium-Screenshots/090313-110412.jpg -> ./090313-110412.jpg
pull: /sdcard/Robotium-Screenshots/090313-110408.jpg -> ./090313-110408.jpg
pull: /sdcard/Robotium-Screenshots/090313-110406.jpg -> ./090313-110406.jpg
pull: /sdcard/Robotium-Screenshots/090313-110404.jpg -> ./090313-110404.jpg
5 files pulled. 0 files skipped.
61 KB/s (338736 bytes in 5.409s)
于 2013-03-09T17:48:51.020 に答える
2

デビッドの答えに基づいて構築すると、これがわずかに優れていることがわかります。

adb shell ls /foo | tr -d '\r' | xargs -n1 adb pull

入力する文字が1文字少ないことに加えて(大したことです)-r、をスペースに変換しません。これは、あなたがやろうとしているかのように、大きな違いです

adb shell ls /foo/myFile* | tr '\r' ' ' | xargs -i -n1 adb pull {} someDir

というエラーが表示されます

remote object '/foo/myFile1 ' does not exist

代わりに、これを行うことができます。

adb shell ls /foo/myFile* | tr -d '\r' | xargs -i -n1 adb pull {} someDir 
于 2016-05-09T17:46:14.823 に答える
-3

Android には、権限が関連付けられたフォルダーがいくつかあります。一部のフォルダーは、ルートまたはシステム ユーザーに属します。

「adb pull」を実行する前に、これらのファイル、フォルダーのアクセス許可を変更する必要があります。

次のコマンドが役立ちます。

adb shell
su
chmod -R 777 target_folder
exit
...
adb pull /.../target_folder/ . (current local folder)
于 2015-05-21T21:28:54.447 に答える