Làm cách nào để chỉ kéo các tập tin mới hơn bằng cách kéo Adb (Tiện ích SDK Android)


12

Với lệnh "adb pull / sdcard /", tôi có thể sao chép tất cả nội dung của bộ nhớ trong của điện thoại Android vào thư mục cục bộ hiện tại của mình (và "adb pull / mnt / extSdCard /" tương tự với thẻ SD bên ngoài). Nhưng lệnh đó luôn sao chép mọi thứ, ngay cả các tệp tôi đã lưu trữ cục bộ.

Có cách nào để chỉ sao chép các tập tin mới và sửa đổi? (tập tin có ngày mới hơn)

Câu trả lời:


8

Theo mô tả của ss-3-1415926535897932384626433 không có cờ, nhưng bạn phải lấy danh sách các tệp trước rồi kiểm tra xem các tệp cục bộ của bạn có khớp không. Tôi đã viết một kịch bản nhỏ cho nó:

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

Điều chỉnh thư mục từ xa rfoldervà thư mục cục bộ lfolderđến các vị trí bạn chọn.


Điều này có vẻ khá tốt. Nó cũng hoạt động đệ quy hay chỉ trong một thư mục và không có thư mục con?
OMA

Đây thực sự không phải là đệ quy, nhưng hãy thoải mái cải thiện. :-)
Anne van Rossum

Cũng lưu ý rằng tôi chưa so sánh ngày ở đây, vì vậy nếu bạn đã thay đổi tệp, họ sẽ không được cập nhật.
Anne van Rossum

6

adb-sync - tập lệnh python nhỏ nhưng mạnh mẽ có thể thực hiện tất cả các yêu cầu của bạn và hơn thế nữa ... https://github.com/google/adb-sync


Mặc dù liên kết có thể là câu trả lời cho người dùng này, tốt nhất là giải thích đầy đủ phương pháp và quy trình phải thực hiện để làm cho nó hoạt động. android.stackexchange.com/help/how-to-answer
acejavelin

Cảm ơn đã đề cập. Tôi đã phải thực hiện một số thay đổi đối với mã nguồn để nó hoạt động cho trường hợp sử dụng của mình (đường dẫn không hợp lệ cho Windows gây ra sự cố, rõ ràng phiên bản Python không khớp, v.v. - để biết chi tiết, hãy xem các sự cố tôi đã nhận xét), nhưng cuối cùng nó đã bị cách duy nhất tôi có thể truy xuất các tệp của mình từ phân vùng dữ liệu bị hỏng. (kéo adb của toàn bộ thư mục sẽ bị sập trên các tệp khác nhau và tôi không muốn xóa thủ công từng tệp sau đó khởi động lại toàn bộ quá trình chuyển - với adb-sync [+ sửa đổi của tôi] nó sẽ thất bại với một tệp đó sau đó tiếp tục)
Venryx

4

adb pull dường như không cung cấp một cờ để kéo các tập tin được chọn .

Như một giải pháp thay thế, bạn có thể làm điều này: Sử dụng adb shell [Unix shell command]để sao chép các tệp đã chọn vào một vị trí tạm thời và sau đó kéo tất cả các tệp từ vị trí đó.

Cập nhật:
Bạn có thể sử dụng cp -u [source] [destination]lệnh unix shell để chỉ sao chép các tệp đã sửa đổi trong lần chạy tiếp theo. Bạn cũng có thể sử dụng -rcờ để sử dụng nó trên đệ quy thư mục, nếu cần.


Cảm ơn câu trả lời của bạn. Sao chép tất cả các tệp sang một vị trí khác để sau đó có thể cập nhật chỉ một tệp đã thay đổi là khá chậm. Quá tệ là adb không chứng minh được cách sao chép chỉ các tệp mới hơn.
OMA

@OMA Bạn có thể sử dụng shell để lấy danh sách các tệp mới, sau đó sử dụng adb pulltrong danh sách đó.
Matthew đọc

@MatthewRead Bất kỳ gợi ý về cách làm điều đó? Cảm ơn!
OMA

@OMA Tôi không thể hiểu vấn đề của bạn với điều này. Sử dụng cả hai lệnh trong một dòng hoặc tạo bí danh (cũng thêm một lệnh để lọc vị trí tạm thời sau khi hoạt động). Nếu có một lá cờ adb kéo cho điều đó, nó sẽ hoạt động theo cách tương tự.
Android Quesito
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.