adb birden çok dosya çek


87

Kullanarak birden fazla dosya çekmenin en iyi yolu nedir

adb pull

Benim var /sdcard/şu ada sahip 25 dosya:

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

Joker karakter çalışmıyor:

adb pull /sdcard/gps*.trace .

4
Ben kullanmıyorum adbama dokümanlardan pullbir dizinin tamamını çekmek için kullanılabilir ??? Durum buysa ve bunlar kendi uygulamanız tarafından oluşturulan dosyalardır, o zaman neden onları gibi bir alt dizine yazıp /sdcard/mygpsfilessonra kullanmıyorsunuz adb pull /sdcard/mygpsfiles? Işe yarar mı?
— Squonk

2
Alternatif olarak, Dosya Gezgini'ni DDMStutulma perspektifinde denedim ve sdcard'ımdan çoklu dosya seçip pullüzerlerinde bir gerçekleştirebildim . Eclipse kullanmıyorsanız, DDMS ayrı bir SDK aracı olarak mevcuttur.
— Squonk

monitorkomut harika çalışıyor, içinde olmalı <sdkdir>/tools!
— Santosh Kumar

Yanıtlar:


142

Joker karakterleri kabul xargseden adb shell lskomutun sonucunu kullanabilirsiniz . Bu, birden çok dosyayı kopyalamanıza izin verir. Sinir bozucu bir şekilde, adb shell lskomutun çıktısı, kullanarak kaldırabileceğiniz satır besleme kontrol karakterlerini içerir tr -d '\r'.

Örnekler:

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

aslında bunlar filtrelenmesi gereken satır başları, ancak belirsiz bir konu hakkında doğru fikir
— Chris Stratton

4
Dosya adlarındaki boşlukları işleyebilen biraz geliştirilmiş bir sürümü burada bulabilirsiniz: github.com/sschuberth/dev-scripts/blob/master/android/…
— sschuberth

Bilginize: Windows ve DOS, satır başı / satır besleme çiftleri için "\ r \ n" kullanır (yani "\ n \ r" değil).
— BrainSlugs83

3
benim durumumda android'in kök dizininden (doğru bir şekilde elde edilen) dosya adlarını çekmeye çalışırken başarısız oldu, bunu çözmek için kullandım:adb shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | xargs -n1 adb pull
— 14'te

4
— Tr'nin

101

adb pull at file yerine bir dizin adı alabilir ve içindeki tüm dosyaların bulunduğu dizini çeker.

Tüm gps izlerinizi / sdcard / gpsTraces içine alın

adb pull /sdcard/gpsTraces/ . 

Örnek adb pullve adb pushözyinelemeli dizinleri:

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)

3
@kakyo Benim için alt klasörler için çalışıyor. google'dan en son ADB'ye sahip olup olmadığınızı kontrol edin. (1.0.29 kullanıyorum)
— Ofir Luzon

Evet, sonunda boş olmayan klasörler için çalıştığını buldum. Alınmayan bazı boş klasörlerim vardı. Ayrıca, "itme" yinelemeli değil gibi görünüyor?
— kakyo

@kakyo Cevabıma yinelemeli bir çekme ve itme çıktısını ekledim. Boş klasörler konusunda haklısınız, çekilmezler veya itilmezler.
— Ofir Luzon

1
Dikkat: ADB çekildiğinde dosyalar orijinal değiştirilme tarihlerini kaybeder.
— Stan

3
@Stan: "adb pull [-a] <remote> ... <local>" gibi "-a" seçeneğini kullanmadığınız sürece, bu yardıma göre dosya zaman damgasını ve modunu korur.
— Rusty Gear

27

./adb pull /sdcard <- başarısız

./adb pull /sdcard/ <- yinelemeli olarak çalışır - sondaki eğik çizgiye dikkat edin

Nexus 5 ve adb ile Mart 2014'te indirilerek test edilmiştir.


1
Benim için son eğik çizgi olmadan yinelemeli olarak çalıştı, adb sürüm 1.0.32
— Antonio

Ek oyumu geri almam gerekiyor çünkü @Antonio doğru.
— Shayan


6

Olsa adb pullkomut uzaktan parametre için klasör adını kabul etmeye başladı, hala kullanmayı tercih tarkomutu. Bu daha fazla esneklik sağlar - dosya adı desenleri (her ikisi için izin verir içerir ve dışlamak ) sembolik link kontrolü, korur dosya izinleri. Android 6.0'dan beri yerleşik olarak kullanabilirsiniz. Bundan önce aşağıdaki gibi 3. taraf araçları kullanmanız gerekiyordu busybox:

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

Yolunuzdaki liderleri atladığınızdan emin olun /.


Oh, işe yaramadı. tar -tvf, sonucun bir tar arşivi gibi görünmediğini söylüyor. Oh iyi.
— themuddler

Çok güçlü bir yol! Ancak sorun çıktı dosyasına eklenen "tar: üye adlarından baştaki '/' kaldırılıyor" gibi hatalar / uyarılardır. Bunu nasıl ortadan kaldıracağımı bilmiyorum.
— x'ES

Çıktıda 1.5KB dosya alıyorum.
— Shayan

5

Bunu Windows kutuları için oluşturdum, dosya sistemini bağlamadan dosyaları joker karakter kullanarak aktarmak çok kullanışlıdır. Bu komut dosyasını ortam yolunuzda bir yere ekleyebilirsiniz.

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

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



3

Dizin çekme, yeni Android araçlarında kullanılabilir. (Hangi sürümden eklendiğini bilmiyorum, ancak en son ADT 21.1 üzerinde çalışıyor)

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)

2

David'in cevabına dayanarak, bunu biraz daha iyi buluyorum:

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

Yazmak için bir karakter eksik olmasına ek olarak (önemli) -r, bir boşluğa dönüştürmez . Bu önemli bir fark, sanki yapmaya çalışıyormuşsun gibi

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

söylerken hata alacaksın

remote object '/foo/myFile1 ' does not exist

Bunun yerine, işe yarayacak olan bunu yapabilirsiniz:

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

0

Joker karakterler benim durumumda çalışıyor, sanal cihazımın Whatsapp Görüntülerini masaüstüme aktarmak için aşağıdaki basit komut dosyasını kullanıyorum

#! /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

Android'de cp için joker karakterler kullanırsınız, ana bilgisayarı çekmek için değil, bu yüzden çalışır. Güzel bir alternatif, ancak / sdcard / 'a kopyalamak fazladan belleğe mal oluyor ve özel dosyaları sdcard'a sızdırıyor.
— user905686

0

Güç kalkanı:

adb shell ls /sdcard/gps*.trace | foreach {adb pull $_}


-3

Android'de, ilişkili izinlere sahip bazı klasörler var! Bazı klasörler kök veya sistem kullanıcısına aittir.

"Adb pull" yapmadan önce bu dosyaların, klasörlerin izinlerini değiştirmelisiniz.

Aşağıdaki komutlar yardımcı olabilir:

adb shell
su
chmod -R 777 target_folder
exit
...
adb pull /.../target_folder/ . (current local folder)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.