adb कई फाइलों को खींचता है


87

का उपयोग करके कई फ़ाइलों को खींचने का सबसे अच्छा तरीका क्या है

adb pull

/sdcard/निम्नलिखित नाम के साथ मेरी 25 फाइलें हैं:

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

वाइल्डकार्ड काम नहीं करता है:

adb pull /sdcard/gps*.trace .

4
मैं उपयोग नहीं करता, adbलेकिन डॉक्स से pullपूरी निर्देशिका खींचने के लिए इस्तेमाल किया जा सकता है ??? अगर ऐसा है और ये आपके खुद के ऐप द्वारा जनरेट की गई फाइलें हैं, तो क्यों न इन्हें एक उप-निर्देशिका में लिखें /sdcard/mygpsfilesऔर फिर उपयोग करें adb pull /sdcard/mygpsfiles। क्या इससे काम हो जायेगा?
स्क्वॉन्क

2
वैकल्पिक रूप से, मैंने सिर्फ DDMSग्रहण के परिप्रेक्ष्य में फाइल एक्सप्लोरर की कोशिश की है और अपने sdcard से फ़ाइलों का चयन करने और pullउन पर प्रदर्शन करने में सक्षम था । यदि आप ग्रहण का उपयोग नहीं करते हैं, तो डीडीएमएस एक अलग एसडीके उपकरण के रूप में उपलब्ध है।
स्क्वॉन्क

monitorकमांड महान काम करता है, में होना चाहिए <sdkdir>/tools!
संतोष कुमार

जवाबों:


142

आप उपयोग कर सकते हैं xargsऔर adb shell lsआदेश का परिणाम जो वाइल्डकार्ड स्वीकार करता है। इससे आप कई फाइल कॉपी कर सकते हैं। आमतौर पर adb shell lsकमांड के आउटपुट में लाइन-फीड कंट्रोल वर्ण शामिल होते हैं जिन्हें आप उपयोग करके निकाल सकते हैं tr -d '\r'

उदाहरण:

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

वास्तव में वे कैरिज रिटर्न हैं जिन्हें फ़िल्टर किया जाना चाहिए, लेकिन एक अस्पष्ट मुद्दे पर सही विचार
क्रिस स्ट्रैटन

4
यहाँ थोड़ा उन्नत संस्करण है जो फ़ाइल नामों में रिक्त स्थान को संभाल सकता है: github.com/sschuberth/dev-scripts/blob/master/android/…
sschuberth

FYI करें: Windows और DOS कैरिज-रिटर्न / लाइन-फीड जोड़े (अर्थात "\ n \ r") के लिए "\ r \ n" का उपयोग नहीं करते हैं।
ब्रेनस्लैगस83

3
मेरे मामले में यह (सही ढंग से प्राप्त) फ़ाइलनाम को एंड्रॉइड की रूट डायरेक्टरी से खींचने में विफल रहा, इसे हल करने के लिए, मैंने उपयोग किया:adb shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | xargs -n1 adb pull
12:14 बजे बर्बाद कर दिया।

4
यह कहना काम नहीं करता है कि tr को आंतरिक या बाहरी कमांड के रूप में मान्यता नहीं दी जाती है
Suncatcher

101

adb pull फ़ाइल के बजाय एक निर्देशिका नाम प्राप्त कर सकते हैं और यह निर्देशिका को इसमें सभी फ़ाइलों के साथ खींच लेगा।

/ Sdcard / gpsTraces में अपने सभी जीपीएस ट्रैस खींचे

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)

3
@ kakyo यह मेरे लिए सबफ़ोल्डर्स के लिए काम करता है। जाँच करें कि आपके पास Google से नवीनतम ADB है। (मैं 1.0.29 उपयोग कर रहा हूँ)
Ofir लुजोन

हां, मैंने पाया कि यह अंत में गैर-खाली फ़ोल्डर के लिए काम करता है। मेरे पास कुछ खाली फ़ोल्डर थे जो खींचे नहीं गए। इसके अलावा, लगता है कि "पुश" गैर-पुनरावर्ती है?
काक्यो

@ kakyo मैंने एक पुनरावर्ती पुल का उत्पादन जोड़ा है और मेरे उत्तर में धक्का दिया है। आप खाली फ़ोल्डर के बारे में सही हैं, वे खींच या धक्का नहीं देते हैं।
आइर लुज़ोन

1
खबरदार: एडीबी पुल के साथ फाइलें अपनी मूल संशोधित तारीख खो देती हैं।
स्टेन

3
@Stan: जब तक आप "-a" विकल्प का उपयोग "adb pull [-a] <रिमोट> ... <स्थानीय>" के रूप में नहीं करते हैं, जो मदद के अनुसार फ़ाइल टाइमस्टैम्प और मोड को संरक्षित करता है।
जंग लगी गियर

27

./adb pull /sdcard <- विफल

./adb pull /sdcard/ <- पुनरावर्ती कार्य करता है - अनुगामी स्लेश पर ध्यान दें

मार्च 2014 में Nexus 5 और adb के साथ परीक्षण किया गया।


1
मेरे लिए इसने अंतिम स्लैश के बिना पुनरावर्ती रूप से काम किया, एडीबी संस्करण 1.0.32
एंटोनियो

मुझे अपना upvote वापस लेने की आवश्यकता है क्योंकि @Antonio सही है।
शयन

8

आउटपुट को 'ls' से पार्स करना आमतौर पर एक बुरा विचार है। इसके बजाय, 'खोजें' का उपयोग करें।

adb shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull

आपको ls के आउटपुट को पार्स क्यों नहीं करना चाहिए


अपनी मशीन पर मुझे adb करने के लिए पूर्ण पथ का उपयोग करने की आवश्यकता थी, लेकिन अन्यथा यह महान काम करता है!
दान जे।

यह जवाब वास्तव में बहुत स्मार्ट है। बहुत बढ़िया!
डार्थ एलीगेंट जूल

6

भले ही adb pullकमांड ने दूरस्थ पैरामीटर के लिए फ़ोल्डर का नाम स्वीकार करना शुरू कर दिया है, फिर भी मैं tarकमांड का उपयोग करना पसंद करता हूं । यह अधिक लचीलापन प्रदान करता है - फ़ाइल नाम पैटर्न (दोनों को शामिल और बाहर करना ), सिमिलिंक नियंत्रण, फ़ाइल अनुमतियों को संरक्षित करता है। Android 6.0 के बाद से आप बिल्ट-इन का उपयोग कर सकते हैं। इससे पहले आपको 3-पार्टी टूल्स का उपयोग करना था जैसे busybox:

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

/अपने मार्ग में अग्रणी को छोड़ना सुनिश्चित करें ।


ओह, यह काम नहीं किया। tar -tvf मुझे बताता है कि परिणाम टार संग्रह की तरह नहीं दिखता है। ओह अच्छा।
थिउलर

बहुत मजबूत तरीका है! लेकिन समस्या त्रुटी है / चेतावनी जैसे "टार: प्रमुख नाम हटाना '/' सदस्य नामों से" को आउटपुट फाइल में जोड़ा गया। इसे खत्म करने का तरीका नहीं जानते।
x'ES

मुझे आउटपुट पर 1.5KB फ़ाइल मिलती है।
शयन

5

मैंने इसे विंडोज बॉक्स के लिए बनाया है, यह फाइलसिस्टम माउंट किए बिना वाइल्डकार्ड का उपयोग करके फ़ाइलों को स्थानांतरित करने के लिए बहुत उपयोगी है। आप इस स्क्रिप्ट को अपने रास्ते में कहीं और शामिल कर सकते हैं।

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*


4

यदि आप लिनक्स या मैक का उपयोग कर रहे हैं, तो Android डिबग ब्रिज के लिए एक FUSE फाइलसिस्टम का उपयोग करें


दुर्भाग्य से मैं सिगविन के साथ विंडोज का उपयोग कर रहा हूं। लेकिन मुझे यह याद रखना होगा - बहुत दिलचस्प समाधान!
hsz

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)

2

डेविड के जवाब पर निर्माण, मुझे यह थोड़ा बेहतर लगता है:

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

एक प्रकार से कम (बड़ा सौदा) टाइप होने के अलावा यह -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 

0

मेरे मामले में वाइल्ड कार्ड काम करते हैं, मैं अपने डेस्कटॉप पर अपने वर्चुअल डिवाइस के व्हाट्सएप इमेज को आयात करने के लिए सरल स्क्रिप्ट का उपयोग कर रहा हूं

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

आप एंड्रॉइड पर cp के लिए वाइल्डकार्ड का उपयोग करते हैं न कि होस्ट पर खींचने के लिए, इसीलिए यह काम करता है। अच्छा विकल्प, हालांकि / sdcard / copy करने से अतिरिक्त मेमोरी खर्च होती है और sdcard में निजी फाइलें लीक होती हैं।
user905686


-3

एंड्रॉइड में, संबंधित अनुमतियों के साथ कुछ फ़ोल्डर हैं! कुछ फ़ोल्डर रूट या सिस्टम उपयोगकर्ता के हैं।

आप लोगों को "adb पुल" करने से पहले उन फ़ाइलों, फ़ोल्डरों की अनुमतियां बदल देनी चाहिए।

निम्नलिखित आदेश मदद कर सकते हैं:

adb shell
su
chmod -R 777 target_folder
exit
...
adb pull /.../target_folder/ . (current local folder)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.