SD Kartta bulunan bir klasörün TÜM dosyalarını nasıl çekebilirim


110

SD Kartımda şu şekilde bir klasörüm var: /mnt/sdcard/Folder1/Folder2/Folder3/*.jpg

Klasör1 ve Klasör2'nin adı sabit kalıyor ve Klasör2 içinde Klasör3, 4, 5 vb. Var .. adb kullanan tüm dosyalar (daha fazlası var) yerine tüm jpeg dosyalarını bilgisayardaki mevcut dizinime çekmek istiyorum. .

Her klasörde farklı sayıda jpeg dosyası ve diğer dosyalar bulunur ve bunu kullanmayı denedim:

adb pull mnt/sdcard/Folder1/Folder2/Folder/*.jpg .

Ama işe yaramadı .. Peki, SD Kartın herhangi bir klasöründe bulunan tüm dosyaları tek bir komutla nasıl çekebilirim (tek komut çünkü her klasörde farklı sayıda dosya vardır)


Linux'ta mısınız yoksa Windows'ta mısınız? Bunu basit bir senaryo ile çözebilir miyiz?
Jared Burrows

Hmm, hem Win7 hem de Ubuntu'da yüklü Android Geliştirme Öğelerine sahibim .. hem o zaman hem de iyi için bir çözüm varsa ..! Ama gerçekte ona sadece Ubuntu için ihtiyacım var (bir VM olarak kurulmuş) .. yani uhmm evet Ubuntu'dayım ..
riteshtch

Lütfen bu soru için doğru cevabı işaretler misiniz?
Jared Burrows

Yanıtlar:


143

Tek Dosya / Klasör kullanarak pull:

adb pull "/sdcard/Folder1"

Çıktı:

adb pull "/sdcard/Folder1"
pull: building file list...
pull: /sdcard/Folder1/image1.jpg -> ./image1.jpg
pull: /sdcard/Folder1/image2.jpg -> ./image2.jpg
pull: /sdcard/Folder1/image3.jpg -> ./image3.jpg
3 files pulled. 0 files skipped.

Kullanarak belirli Dosyalar / Klasörler findgelen BusyBox:

adb shell find "/sdcard/Folder1" -iname "*.jpg" | tr -d '\015' | while read line; do adb pull "$line"; done;

İşte bir açıklama:

adb shell find "/sdcard/Folder1" - use the find command, use the top folder
-iname "*.jpg"                   - filter the output to only *.jpg files
|                                - passes data(output) from one command to another
tr -d '\015'                     - explained here: http://stackoverflow.com/questions/9664086/bash-is-removing-commands-in-while
while read line;                 - while loop to read input of previous commands
do adb pull "$line"; done;         - pull the files into the current running directory, finish. The quotation marks around $line are required to work with filenames containing spaces.

Komut dosyaları en üst klasörde başlayacak ve yinelemeli olarak aşağı inecek ve tüm "* .jpg" dosyalarını bulacak ve bunları telefonunuzdan geçerli dizine çekecektir.


10
adb pull /sdcardhepsini çekmek için!
Ian Vaughan

@IanVaughan bu sık kullandığım bir komut ve benim için çalışıyor ama keşke her şeyi sd karttan çekip alt yollardan birini hariç tutmanın bir yolu
olsaydı

Acaba Android'de var tarmı? ADB üzerindeki basit bir muşamba, dosyaların, meta verilerin, ancak istisnalarla çok ince bir şekilde çekilmesine izin verir. Gzip / bzip2 de oradaysa, sıkıştırılmış bir muşamba kullanılabilir :)
Mark K Cowan

İçin Modern sürümleri adbsize sadece dizin belirtebilirsiniz ve aracı için çekme herşeyi recursivly olacak
DirkyJerky

@ mark-k-cowan paylaşılan (sdcard) ile adb yedeklemesi çok sayıda hata içeriyor.
Smeterlink

72

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)

1
Bunu denedim ama sadece bazı dizinleri çekti. Kriterlerinin ne olduğundan emin değilim.
acjay

2
Eğer sahibi olduğu klasörü çekin isterseniz root , bir başlangıç adbkök oturumu (kullanarak $ adb root).
MasterAM

Komutu, @ MasterAM'in söylediği gibi root olarak çalıştırın! sorunsuz çalıştı! şerefe!
Migisha

@acjay Boş klasörler atlanır. Bu, sonuçta boş olan özyinelemeli klasörler için de geçerlidir. Örneğin /sdcard/folder1/folder2neden olacaktır folder1eğer ihmal edilen folder2boş ve hiçbir diğer dosyaları altında bulunmaktadır folder1.
MDMower

40

Lütfen sadece dosyaları sdcard'dan aldığım dosyaları çekmek istediğiniz yerden vermeyi deneyin.

adb pull sdcard/

Aramayı genişletmek veya filtrelemek için * beğenmeyin. örn: adb pull sdcard / *. txt -> bu geçersiz.

sadece adb pull sdcard /


Bu çok daha temiz bir çözüm. Anlamsal olarak daha iyidir ve dizin yapısını da korur.
Mike

11
Arka unutmayın / yapar mater.
adrin

Adb 1.0.40 sürümünde eğik çizgiye ihtiyacım yoktu
Miserable Variable

6

Evet, dizini özyinelemeli olarak çekmek için sondaki eğik çizgiyi kullanın. Nexus 5 ve adb'nin güncel sürümü (Mart 2014) ile benim için çalışıyor.


Adb 1.0.40 sürümüyle sondaki eğik çizgiye ihtiyacım yoktu
Miserable Variable

Google Pixel XL'de Android Q çalıştıran Android Debug Bridge 1.0.32 sürümünde sondaki eğik çizgiye ihtiyacım vardı.
Rock Lee

2

ADB 1.0.32 sürümüne sahip Android 6'da, kopyalamak istediğiniz klasörü / arkasına koymanız gerekir. Örneğinadb pull "/sdcard/".


Adb 1.0.40 sürümüyle sondaki eğik çizgiye ihtiyacım yoktu
Miserable Variable

1

jellybean kullanıyorsanız cmd'yi başlatırsanız, okunabilir olduğundan emin olmak için adb cihazları yazın, adb pull sdcard / sdcard_ (tarih veya ekstra) yazın <--- bu dosyanın önceden adb dizininde yapılması gerekir. KAR!

Diğer sürümlerde adb pull mnt / sdcard / sdcard_ yazın (tarih veya ekstra)

Dosya yapmayı unutma, yoksa ya ortalığı karıştırır ya da işe yaramaz.


1

Köklü bir aygıttan sınırlı erişime sahip bir dizini çekmek istiyorsanız, adb'yi root olarak yeniden başlatmanız gerekir: adb rootpull önce yazın . Aksi takdirde hata mesajı alırsınızremote object '/data/data/xxx.example.app' does not exist

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.