Nie używam, adbale z dokumentów pullmożna pobrać cały katalog ??? Jeśli tak jest i są to pliki wygenerowane przez Twoją własną aplikację, dlaczego nie zapisać ich w podkatalogu, takim jak, /sdcard/mygpsfilesa następnie użyj adb pull /sdcard/mygpsfiles. Czy to zadziała?
Squonk
2
Alternatywnie, właśnie wypróbowałem Eksplorator plików w DDMSperspektywie zaćmienia i byłem w stanie wybrać wiele plików z mojej karty SD i wykonać pullna nich. Jeśli nie używasz eclipse, DDMS jest dostępny jako oddzielne narzędzie SDK.
Squonk
monitorpolecenie działa świetnie, powinno być <sdkdir>/tools!
Santosh Kumar,
Odpowiedzi:
141
Możesz użyć xargsi wyniku adb shell lspolecenia, które akceptuje symbole wieloznaczne. Umożliwia to kopiowanie wielu plików. Irytująco wynik adb shell lspolecenia zawiera znaki sterujące przesuwem o wiersz, które można usunąć za pomocą tr -d '\r'.
FYI: Windows i DOS używają "\ r \ n" dla par powrót karetki / wysuw wiersza (tj. Nie "\ n \ r").
BrainSlugs83
3
w moim przypadku nie udało się wyciągnąć (poprawnie uzyskanych) nazw plików z katalogu głównego Androida, aby go rozwiązać, użyłem:adb shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | xargs -n1 adb pull
rupps
4
Nie działa, mówiąc, że tr nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne
Suncatcher
101
adb pull może otrzymać nazwę katalogu zamiast at file i ściągnie katalog ze wszystkimi plikami w nim zawartymi.
Pobierz wszystkie ślady GPS w / sdcard / gpsTraces
adb pull /sdcard/gpsTraces/ .
Przykład adb pulli adb pushkatalogów rekurencyjnych:
@kakyo To działa dla mnie w podfolderach. sprawdź, czy masz najnowszy ADB z google. (Używam 1.0.29)
Ofir Luzon
Tak, okazało się, że w końcu działa dla niepustych folderów. Miałem kilka pustych folderów, które nie zostały wyciągnięte. Wydaje się też, że „push” nie jest rekursywne?
kakyo
@kakyo Dodałem dane wyjściowe wyciągnięcia rekurencyjnego i wypchnięcia do mojej odpowiedzi. Masz rację co do pustych folderów, nie są one ciągnięte ani popychane.
Ofir Luzon
1
Uwaga: dzięki ADB pull pliki tracą oryginalną datę modyfikacji.
Stan
3
@Stan: chyba że użyjesz opcji "-a" jak w "adb pull [-a] <remote> ... <local>", która zgodnie z pomocą zachowuje znacznik czasu i tryb pliku.
Rusty Gear
27
./adb pull /sdcard <- niepowodzenie
./adb pull /sdcard/ <- działa rekurencyjnie - zwróć uwagę na końcowy ukośnik
Testowane z Nexusem 5 i adb pobranym w marcu 2014 r.
Na moim komputerze musiałem użyć pełnej ścieżki do adb, ale poza tym działało świetnie!
Dan J
Ta odpowiedź jest właściwie całkiem sprytna. Dobra robota!
Darth Egregious
6
Mimo że adb pullpolecenie zaczęło akceptować nazwę folderu dla parametru zdalnego, nadal wolę używać tarpolecenia. Zapewnia większą elastyczność - pozwala na wzorce nazw plików (zarówno włączanie, jak i wykluczanie ), kontrolę łączy symbolicznych, zachowuje uprawnienia do plików. Od Androida 6.0 możesz korzystać z wbudowanego. Wcześniej trzeba było używać narzędzi innych firm, takich jak busybox:
adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Pamiętaj, aby ominąć prowadzenie /na swojej ścieżce.
Och, to nie zadziałało. tar -tvf mówi mi, że wynik nie wygląda jak archiwum tar. No cóż.
themuddler
Bardzo mocny sposób! Ale problemem są błędy / ostrzeżenia, takie jak „tar: usuwanie początkowego znaku '/' z nazw członków” dodawane do pliku wyjściowego. Nie wiem, jak to wyeliminować.
x'ES
Otrzymuję plik 1,5KB na wyjściu.
Shayan
5
Stworzyłem to dla skrzynek Windows. Bardzo przydatne jest przesyłanie plików przy użyciu symboli wieloznacznych bez montowania systemu plików. Możesz umieścić ten skrypt gdzieś w swojej ścieżce env.
adbpull.bat
@echo off
setlocal enabledelayedexpansion
if %1.==. (
echo Wilcard parameter is required.
gotoend
)
for /F "tokens=* USEBACKQ" %%F in (`adb shell ls %1`) do (
settext=%%F
set mfile=!text:~0,-1!
adb pull "!mfile!"
)
:end
endlocal
Dzikie karty działają w moim przypadku, użyłem następującego prostego skryptu, aby zaimportować obrazy Whatsapp mojego urządzenia wirtualnego na mój pulpit
Używasz symboli wieloznacznych dla cp na Androidzie, a nie do ściągania hosta, dlatego to działa. Dobra alternatywa, chociaż kopiowanie do / sdcard / kosztuje dodatkową pamięć i wycieka prywatne pliki na sdcard.
user905686
0
PowerShell:
adb shell ls /sdcard/gps*.trace | foreach {adb pull $_}
adb
ale z dokumentówpull
można pobrać cały katalog ??? Jeśli tak jest i są to pliki wygenerowane przez Twoją własną aplikację, dlaczego nie zapisać ich w podkatalogu, takim jak,/sdcard/mygpsfiles
a następnie użyjadb pull /sdcard/mygpsfiles
. Czy to zadziała?DDMS
perspektywie zaćmienia i byłem w stanie wybrać wiele plików z mojej karty SD i wykonaćpull
na nich. Jeśli nie używasz eclipse, DDMS jest dostępny jako oddzielne narzędzie SDK.monitor
polecenie działa świetnie, powinno być<sdkdir>/tools
!Odpowiedzi:
Możesz użyć
xargs
i wynikuadb shell ls
polecenia, które akceptuje symbole wieloznaczne. Umożliwia to kopiowanie wielu plików. Irytująco wynikadb shell ls
polecenia zawiera znaki sterujące przesuwem o wiersz, które można usunąć za pomocątr -d '\r'
.Przykłady:
adb shell 'ls sdcard/gps*.trace' | tr -d '\r' | xargs -n1 adb pull adb shell 'ls /sdcard/*.txt' | tr -d '\r' | sed -e 's/^\///' | xargs -n1 adb pull
źródło
adb shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | xargs -n1 adb pull
adb pull
może otrzymać nazwę katalogu zamiast at file i ściągnie katalog ze wszystkimi plikami w nim zawartymi.Pobierz wszystkie ślady GPS w / sdcard / gpsTraces
adb pull /sdcard/gpsTraces/ .
Przykład
adb pull
iadb push
katalogów rekurencyjnych: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)
źródło
./adb pull /sdcard
<- niepowodzenie./adb pull /sdcard/
<- działa rekurencyjnie - zwróć uwagę na końcowy ukośnikTestowane z Nexusem 5 i adb pobranym w marcu 2014 r.
źródło
Przetwarzanie wyjścia z „ls” jest ogólnie złym pomysłem. Zamiast tego użyj „znajdź”.
adb shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull
Dlaczego nie powinieneś analizować wyjścia ls
źródło
Mimo że
adb pull
polecenie zaczęło akceptować nazwę folderu dla parametru zdalnego, nadal wolę używaćtar
polecenia. Zapewnia większą elastyczność - pozwala na wzorce nazw plików (zarówno włączanie, jak i wykluczanie ), kontrolę łączy symbolicznych, zachowuje uprawnienia do plików. Od Androida 6.0 możesz korzystać z wbudowanego. Wcześniej trzeba było używać narzędzi innych firm, takich jakbusybox
:adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Pamiętaj, aby ominąć prowadzenie
/
na swojej ścieżce.źródło
Stworzyłem to dla skrzynek Windows. Bardzo przydatne jest przesyłanie plików przy użyciu symboli wieloznacznych bez montowania systemu plików. Możesz umieścić ten skrypt gdzieś w swojej ścieżce 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
Przykład:
adbpull /sdcard/DCIM/Camera/IMG_2016*
źródło
ADBFS system plików FUSE dla Android Debug Bridge, jeśli używasz Linuksa lub Maca
źródło
Pobieranie katalogu jest dostępne w nowych narzędziach systemu Android. (Nie wiem, z której wersji został dodany, ale działa na najnowszym 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)
źródło
opierając się na odpowiedzi Davida, uważam, że jest to nieco lepsze:
adb shell ls /foo | tr -d '\r' | xargs -n1 adb pull
Oprócz tego, że wpisywanie jest o jeden znak mniej (wielka sprawa), nie konwertuje znaku
-r
na spację. To znacząca różnica, jakbyś próbował to zrobićadb shell ls /foo/myFile* | tr '\r' ' ' | xargs -i -n1 adb pull {} someDir
pojawi się błąd mówiąc
remote object '/foo/myFile1 ' does not exist
Zamiast tego możesz to zrobić, co zadziała:
adb shell ls /foo/myFile* | tr -d '\r' | xargs -i -n1 adb pull {} someDir
źródło
Dzikie karty działają w moim przypadku, użyłem następującego prostego skryptu, aby zaimportować obrazy Whatsapp mojego urządzenia wirtualnego na mój pulpit
#! /bin/bash mkdir -p ~/Pictures/Pictures_adb rm -f ~/Pictures/Pictures_adb/* cd ~/Pictures/Pictures_adb adb root adb shell 'cp /data/media/0/WhatsApp/Media/WhatsApp\ Profile\ Photos/* /sdcard/Pictures/;exit' adb pull /sdcard/Pictures mv ~/Pictures/Pictures_adb/Pictures/* ~/Pictures/Pictures_adb/ rmdir ~/Pictures/Pictures_adb/Pictures cd
źródło
PowerShell:
adb shell ls /sdcard/gps*.trace | foreach {adb pull $_}
źródło
W systemie Android istnieje folder z powiązanymi uprawnieniami! Niektóre foldery należą do użytkownika root lub użytkownika systemu.
Powinniście zmienić uprawnienia do tych plików i folderów przed wykonaniem „adb pull”.
Pomocne mogą być następujące polecenia:
adb shell su chmod -R 777 target_folder exit ... adb pull /.../target_folder/ . (current local folder)
źródło