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.