ฉันจะดึงไฟล์ทั้งหมดของโฟลเดอร์ที่มีอยู่ใน SD Card ได้อย่างไร


110

ฉันมีโฟลเดอร์ใน SD Card เป็น: /mnt/sdcard/Folder1/Folder2/Folder3/*.jpg

ชื่อของ Folder1 และ Folder2 จะคงที่และภายใน Folder2 ฉันมี Folder3, 4, 5 และอื่น ๆ .. ฉันต้องการดึงไฟล์ jpeg ทั้งหมดแทนที่จะเป็นไฟล์ทั้งหมด (มีมากกว่า) โดยใช้ adb ไปยังไดเร็กทอรีปัจจุบันของฉันบนคอมพิวเตอร์ .

ทุกโฟลเดอร์มีไฟล์ jpeg และไฟล์อื่น ๆ ที่แตกต่างกันและฉันลองใช้สิ่งนี้:

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

แต่มันไม่ได้ผล .. เอ่อฉันจะดึงไฟล์ทั้งหมดที่มีอยู่ในโฟลเดอร์ใดก็ได้ของ SD Card ด้วยคำสั่งเดียวได้อย่างไร (คำสั่งเดียวเนื่องจากแต่ละโฟลเดอร์มีจำนวนไฟล์ต่างกัน)


คุณอยู่ใน Linux หรือ Windows? สิ่งนี้เราสามารถแก้ไขได้ด้วยสคริปต์ง่ายๆ?
Jared Burrows

อืมฉันมี Android Developement Stuff ที่ติดตั้งไว้ทั้ง Win7 และ Ubuntu .. ถ้ามีวิธีแก้ปัญหาทั้งดีและดี .. ! แต่ในความเป็นจริงฉันต้องการมันสำหรับ Ubuntu เท่านั้น (ติดตั้งเป็น VM) .. เอ่อใช่ฉันบน Ubuntu ..
riteshtch

คุณช่วยทำเครื่องหมายคำตอบที่ถูกต้องสำหรับคำถามนี้ได้ไหม
Jared Burrows

คำตอบ:


143

ไฟล์เดียว / โฟลเดอร์โดยใช้pull:

adb pull "/sdcard/Folder1"

เอาท์พุต:

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.

ไฟล์ / โฟลเดอร์เฉพาะที่ใช้findจากBusyBox:

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

นี่คือคำอธิบาย:

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.

สคริปต์จะเริ่มต้นในโฟลเดอร์ด้านบนและจะลงไปซ้ำและค้นหาไฟล์ "* .jpg" ทั้งหมดและดึงจากโทรศัพท์ของคุณไปยังไดเร็กทอรีปัจจุบัน


10
adb pull /sdcardเพื่อดึงทั้งหมด!
Ian Vaughan

@IanVaughan นั่นเป็นคำสั่งที่ฉันใช้บ่อยและใช้ได้กับฉัน แต่ฉันหวังว่าจะมีวิธีดึงทุกอย่างออกจากการ์ด sd แต่ไม่รวมหนึ่งในเส้นทางย่อย
GµårÐïåñ

ฉันสงสัยว่า Android มีtar? ผ้าใบกันน้ำที่เรียบง่ายบน ADB จะช่วยให้สามารถดึงไฟล์ข้อมูลเมตาได้อย่างละเอียด แต่มีการยกเว้น ถ้า gzip / bzip2 อยู่ที่นั่นด้วยก็จะสามารถใช้ผ้าใบกันน้ำแบบบีบอัดได้ :)
Mark K Cowan

สำหรับเวอร์ชันที่ทันสมัยadbคุณสามารถระบุไดเร็กทอรีและเครื่องมือจะดึงทุกอย่างมาให้คุณ
ซ้ำ

@ mark-k-cowan การสำรองข้อมูล adb กับ shared (sdcard) มีข้อบกพร่องมากมาย
Smeterlink

72

การดึงไดเรกทอรีพร้อมใช้งานในเครื่องมือ 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)

1
ฉันลองสิ่งนี้ แต่ดึงไดเร็กทอรีบางส่วนเท่านั้น ไม่แน่ใจว่าเกณฑ์คืออะไร
acjay

2
หากคุณต้องการที่จะดึงโฟลเดอร์ที่เป็นเจ้าของโดยราก , เริ่มต้นadbเซสชั่นราก (ใช้$ adb root)
MasterAM

รันคำสั่งในฐานะรูทเหมือนที่ @MasterAM กล่าว! ทำงานได้โดยไม่มีปัญหา! ไชโย!
Migisha

@acjay โฟลเดอร์ว่างจะถูกละไว้ นอกจากนี้ยังเป็นจริงสำหรับโฟลเดอร์แบบวนซ้ำที่ว่างเปล่าในที่สุด เช่น/sdcard/folder1/folder2จะทำให้folder1ถูกละเว้นหากfolder2ว่างเปล่าและไม่มีไฟล์อื่นอยู่folder1ข้างใต้
MDMower

40

โปรดลองโดยให้เส้นทางจากจุดที่คุณต้องการดึงไฟล์ที่ฉันเพิ่งได้รับไฟล์จาก sdcard เช่น

adb pull sdcard/

อย่าให้ * ต้องการขยายการค้นหาหรือเพื่อกรองออก เช่น adb pull sdcard / *. txt -> สิ่งนี้ไม่ถูกต้อง

เพียงแค่ให้ adb ดึง sdcard /


นี่เป็นวิธีที่สะอาดกว่ามาก มันดีกว่าทางความหมายและรักษาโครงสร้างไดเร็กทอรีด้วย
Mike

11
โปรดทราบว่าต่อท้าย/ ไม่เก่า
adrin

ฉันไม่ต้องการเครื่องหมายทับด้วย adb เวอร์ชัน 1.0.40
ตัวแปรที่

6

ใช่เพียงแค่ใช้เครื่องหมายทับเพื่อดึงไดเร็กทอรีซ้ำ ใช้ได้กับ Nexus 5 และ adb เวอร์ชันปัจจุบัน (มีนาคม 2014)


ฉันไม่ต้องการเครื่องหมายทับด้วย adb เวอร์ชัน 1.0.40
ตัวแปรที่

ฉันต้องการเครื่องหมายทับบน Android Debug Bridge เวอร์ชัน 1.0.32 ที่ใช้ Android Q บน Google Pixel XL
Rock Lee

2

ใน Android 6 พร้อม ADB เวอร์ชัน 1.0.32 คุณต้องใส่ / หลังโฟลเดอร์ที่คุณต้องการคัดลอก เช่นadb pull "/sdcard/".


ฉันไม่ต้องการเครื่องหมายทับด้วย adb เวอร์ชัน 1.0.40
ตัวแปรที่

1

หากคุณใช้ jellybean เพียงแค่เริ่ม cmd ให้พิมพ์ adb devices เพื่อให้แน่ใจว่าอ่านได้พิมพ์ adb pull sdcard / sdcard_ (วันที่หรือส่วนเกิน) <--- ไฟล์นี้ต้องสร้างในไดเรกทอรี adb ล่วงหน้า กำไร!

ในเวอร์ชันอื่นให้พิมพ์ adb pull mnt / sdcard / sdcard_ (วันที่หรือเพิ่มเติม)

อย่าลืมสร้างไฟล์ไม่เช่นนั้นคุณจะยุ่งหรือไม่ได้ผล


1

หากคุณต้องการดึงไดเร็กทอรีที่มีการเข้าถึงแบบ จำกัด จากอุปกรณ์ที่รูทคุณต้องรีสตาร์ท adb เป็น root: พิมพ์adb rootก่อนดึง มิฉะนั้นคุณจะได้รับข้อผิดพลาดว่าremote object '/data/data/xxx.example.app' does not exist

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.