วิธีการดึงเฉพาะไฟล์ที่ใหม่กว่าด้วย "adb pull"? (ยูทิลิตี้ Android SDK)


13

ด้วยคำสั่ง "adb pull / sdcard /" ฉันสามารถคัดลอกเนื้อหาทั้งหมดของหน่วยความจำภายในของโทรศัพท์ Android ของฉันลงในไดเรกทอรีท้องถิ่นปัจจุบันของฉัน (และ "adb pull / mnt / extSdCard /" ทำเช่นเดียวกันกับการ์ด SD ภายนอก) แต่คำสั่งนั้นจะคัดลอกทุกอย่างแม้แต่ไฟล์ที่ฉันเก็บไว้ในเครื่องแล้ว

มีวิธีการคัดลอกเฉพาะไฟล์ใหม่และแก้ไขหรือไม่? (ไฟล์ที่มีวันที่ใหม่กว่า)

คำตอบ:


9

ตามที่อธิบายโดย ss-3-1415926535897932384626433 ไม่มีแฟล็ก แต่คุณต้องรับรายการไฟล์ก่อนจากนั้นตรวจสอบว่าไฟล์โลคัลของคุณตรงกันหรือไม่ ฉันเขียนสคริปต์เล็กน้อยเพื่อมัน:

#!/bin/sh

rfolder=/sdcard/DCIM/Camera
lfolder=Camera

adb shell ls "$rfolder" > android.files

ls -1 "$lfolder" > local.files

rm -f update.files
touch update.files

while IFS=  read -r q; do
  # Remove non-printable characters (are not visible on console)
  l=$(echo ${q} | sed 's/[^[:print:]]//')
  # Populate files to update
  if ! grep -q "$l" local.files; then         
    echo "$l" >> update.files
  fi  
done < android.files

script_dir=$(pwd)
cd $lfolder

while IFS=  read -r q; do
  # Remove non-printable characters (are not visible on console)
  l=$(echo ${q} | sed 's/[^[:print:]]//')
  echo "Get file: $l"
  adb pull "$rfolder/$l"
done < "${script_dir}"/update.files

ปรับโฟลเดอร์ระยะไกลrfolderและโฟลเดอร์ท้องถิ่นlfolderไปยังตำแหน่งที่คุณต้องการ


มันดูดีทีเดียว มันยังทำงานซ้ำหรือเพียงแค่ในไดเรกทอรีเดียวและไม่มีไดเรกทอรีย่อยหรือไม่?
OMA

นี่ไม่ใช่การเรียกซ้ำ - แต่อย่าลังเลที่จะปรับปรุง :-)
Anne van Rossum

โปรดทราบว่าฉันยังไม่เปรียบเทียบวันที่นี่ดังนั้นหากคุณมีการเปลี่ยนแปลงไฟล์พวกเขาจะไม่ได้รับการอัปเดต
Anne van Rossum

7

adb-sync - สคริปต์ python ขนาดเล็ก แต่ทรงพลังที่สามารถทำทุกอย่างที่คุณต้องการและอื่น ๆ ... https://github.com/google/adb-sync


แม้ว่าลิงก์อาจเป็นคำตอบสำหรับผู้ใช้รายนี้ แต่ก็เป็นการดีที่สุดที่จะอธิบายวิธีการและขั้นตอนการทำงานให้สมบูรณ์ android.stackexchange.com/help/how-to-answer
acejavelin

ขอบคุณสำหรับการกล่าวถึง ฉันต้องทำการเปลี่ยนแปลงหลายอย่างในซอร์สโค้ดเพื่อให้มันใช้งานได้กับกรณีการใช้งาน (พา ธ ที่ไม่ถูกต้องสำหรับ Windows ทำให้เกิดความผิดพลาด, Python เวอร์ชันไม่ตรงกันเห็นได้ชัด ฯลฯ - สำหรับรายละเอียดดูปัญหาที่ฉันแสดงความคิดเห็น) วิธีเดียวที่ฉันสามารถดึงไฟล์ของฉันจากพาร์ทิชันข้อมูลที่เสียหาย (การดึง adb ของไดเร็กตอรี่ทั้งหมดจะขัดข้องกับไฟล์ต่าง ๆ , และฉันไม่ต้องการลบแต่ละอันด้วยตนเองจากนั้นรีสตาร์ทการถ่ายโอนทั้งหมด - ด้วย adb-sync [+ การแก้ไขของฉัน] มันจะล้มเหลวเพียงไฟล์เดียว จากนั้นดำเนินการต่อ)
Venryx

4

adb pull ดูเหมือนจะไม่ให้ธงที่จะดึงไฟล์ที่เลือก

คุณสามารถทำสิ่งนี้ได้: ใช้adb shell [Unix shell command]เพื่อคัดลอกไฟล์ที่เลือกไปยังตำแหน่งชั่วคราวแล้วดึงไฟล์ทั้งหมดจากตำแหน่งนั้น

อัปเดต:
คุณสามารถใช้cp -u [source] [destination]คำสั่ง unix shell เพื่อคัดลอกเฉพาะไฟล์ที่ถูกแก้ไขในการรันครั้งต่อไป นอกจากนี้คุณยังสามารถใช้การ-rตั้งค่าสถานะเพื่อใช้ในไดเรกทอรีย่อยซ้ำถ้าจำเป็น


ขอบคุณสำหรับคำตอบ. การคัดลอกไฟล์ทั้งหมดไปยังตำแหน่งอื่นแล้วอาจอัปเดตไฟล์ที่เปลี่ยนแปลงเพียงไฟล์เดียวค่อนข้างช้า น่าเสียดายที่ adb ไม่ได้พิสูจน์วิธีคัดลอกเฉพาะไฟล์ที่ใหม่กว่า
OMA

@OMA คุณสามารถใช้เชลล์เพื่อรับรายการไฟล์ใหม่จากนั้นใช้adb pullในรายการนั้น
Matthew อ่าน

@MatthewRead คำแนะนำใด ๆ เกี่ยวกับวิธีการทำเช่นนั้น? ขอบคุณ!
OMA

@OMA ฉันไม่เข้าใจปัญหาของคุณกับสิ่งนี้ ใช้ทั้งสองคำสั่งในหนึ่งบรรทัดหรือสร้างนามแฝง (เช่นเพิ่มคำสั่งเพื่อกำจัดตำแหน่งชั่วคราวหลังจากการดำเนินการ) หากมีธงของ adb pull สำหรับสิ่งนั้นมันจะทำงานในลักษณะเดียวกัน
Android Quesito
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.