Bagaimana cara menarik hanya file yang lebih baru dengan "adb pull"? (Utilitas Android SDK)

12

Dengan perintah "adb pull / sdcard /" saya dapat menyalin semua isi memori internal ponsel Android saya ke direktori lokal saya saat ini (dan "adb pull / mnt / extSdCard /" melakukan hal yang sama dengan kartu SD eksternal). Tapi perintah itu selalu menyalin semuanya, bahkan file yang sudah saya simpan secara lokal.

Apakah ada cara untuk menyalin hanya file baru dan yang dimodifikasi? (file dengan tanggal yang lebih baru)

OMA
sumber

Jawaban:

8

Seperti dijelaskan oleh ss-3-1415926535897932384626433 tidak ada flag, tetapi Anda harus mendapatkan daftar file terlebih dahulu dan kemudian memeriksa apakah file lokal Anda cocok. Saya menulis naskah kecil untuk itu:

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

Sesuaikan folder jarak jauh rfolderdan folder lokal lfolderke lokasi pilihan Anda sendiri.

Anne van Rossum
sumber
Ini terlihat cukup bagus. Apakah ini juga bekerja secara rekursif atau hanya dalam satu direktori dan tidak ada subdirektori?
OMA
Ini memang non-rekursif, tetapi merasa bebas untuk meningkat. :-)
Anne van Rossum
Perhatikan juga bahwa saya belum membandingkan tanggal di sini, jadi jika Anda telah mengubah file, mereka tidak akan diperbarui.
Anne van Rossum
6

adb-sync - skrip python kecil namun kuat yang dapat melakukan semua yang Anda minta dan banyak lagi ... https://github.com/google/adb-sync

Александр Савин
sumber
Meskipun tautan mungkin merupakan jawaban bagi pengguna ini, yang terbaik adalah menjelaskan sepenuhnya metode dan proses yang harus dilalui untuk membuatnya berfungsi. android.stackexchange.com/help/how-to-answer
acejavelin
Terima kasih untuk menyebutkannya. Saya harus membuat beberapa perubahan pada kode sumber untuk membuatnya berfungsi untuk kasus penggunaan saya (jalur yang tidak valid untuk Windows menyebabkan crash, tampaknya versi Python tidak cocok, dll - untuk detail, lihat masalah yang saya komentari), tetapi akhirnya menjadi satu-satunya cara saya dapat mengambil file saya dari partisi data yang rusak. (tarikan adb dari seluruh direktori akan macet pada berbagai file, dan saya tidak ingin secara manual harus menghapus masing-masing kemudian restart seluruh transfer - dengan adb-sync [+ modifikasi saya] itu hanya akan gagal bahwa satu file kemudian lanjutkan)
Venryx
4

adb pull tampaknya tidak memberikan tanda untuk menarik file yang dipilih .

Sebagai solusinya, Anda dapat melakukan ini: Gunakan adb shell [Unix shell command]untuk menyalin file yang dipilih ke lokasi sementara dan kemudian tarik semua file dari lokasi itu.

Pembaruan:
Anda dapat menggunakan cp -u [source] [destination]perintah unix shell untuk menyalin hanya file yang dimodifikasi pada proses selanjutnya. Anda juga dapat menggunakan -rflag untuk menggunakannya pada subdirektori rekursif, jika diperlukan.

Android Quesito
sumber
Terima kasih atas jawaban anda. Menyalin semua file ke lokasi lain untuk kemudian mungkin memperbarui hanya satu file yang diubah sangat lambat. Sayang sekali bahwa adb tidak tersedia hanya untuk menyalin file yang lebih baru.
OMA
@OMA Anda dapat menggunakan shell untuk mendapatkan daftar file baru, dan kemudian gunakan adb pullpada daftar itu.
Matius Baca
@ MatthewRead Ada petunjuk tentang cara melakukan itu? Terima kasih!
OMA
@OMA Saya tidak dapat memahami masalah Anda dengan ini. Gunakan kedua perintah dalam satu baris atau buat alias (juga tambahkan perintah untuk membersihkan lokasi temp setelah operasi). Jika ada bendera adb pull untuk itu, itu akan bekerja dengan cara yang sama.
Android Quesito