“Adb pull” ile yalnızca daha yeni dosyalar nasıl çekilir? (Android SDK yardımcı programı)


13

"Adb pull / sdcard /" komutuyla Android telefonumun dahili belleğinin tüm içeriğini geçerli yerel dizinime kopyalayabilirim (ve "adb pull / mnt / extSdCard /" harici SD kartla aynı şeyi yapar). Ancak bu komut her zaman her şeyi kopyalar, zaten yerel olarak sakladığım dosyaları bile.

Yalnızca yeni ve değiştirilmiş dosyaları kopyalamanın herhangi bir yolu var mı? (daha yeni tarihli dosyalar)

Yanıtlar:


9

Ss-3-1415926535897932384626433 tarafından açıklandığı gibi bayrak yoktur, ancak önce dosyaların bir listesini almanız ve ardından yerel dosyalarınızın eşleşip eşleşmediğini kontrol etmeniz gerekir. Bunun için küçük bir senaryo yazdım:

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

Uzak klasörü rfolderve yerel klasörü lfolderistediğiniz konumlara ayarlayın .


Bu oldukça iyi görünüyor. Ayrıca özyinelemeli olarak mı yoksa yalnızca tek bir dizinde mi ve alt dizinlerde mi çalışıyor?
OMA

Bu özyinelemeli değildir, ancak geliştirmekten çekinmeyin. :-)
Anne van Rossum

Ayrıca henüz tarihleri ​​burada karşılaştırmamam gerektiğini unutmayın, bu nedenle dosyalarınız değiştiyse güncellenmez.
Anne van Rossum

7

adb-sync - tüm sorulan ve daha fazlasını yapabilen küçük ama güçlü python betiği ... https://github.com/google/adb-sync


Her ne kadar bağlantı bu kullanıcı için cevap olsa da, en iyi şekilde çalışmasını sağlamak için geçecek yöntemi ve süreci açıklamaktır. android.stackexchange.com/help/how-to-answer
acejavelin

Bahsettiğin için teşekkürler. Kullanım durumum için çalışmasını sağlamak için kaynak kodunda birkaç değişiklik yapmak zorunda kaldım (çökmeye neden olan Windows için geçersiz yollar, Python sürümü uyuşmazlığı, vb - ayrıntılar için, yorum yaptığım sorunlara bakın), ancak sona erdi bozuk veri bölümünden dosyalarımı almak için tek yolu. (tüm dizinin adb çekme çeşitli dosyalarda çökecekti ve her birini manuel olarak silmek ve tüm aktarımı yeniden başlatmak zorunda kalmadım - adb-sync [+ modifikasyonlarım] sadece bir dosyada başarısız olur sonra devam edin)
Venryx

4

adb pull seçili dosyaları çekmek için bir bayrak sağlamıyor gibi görünüyor .

Geçici bir çözüm olarak şunları yapabilirsiniz: adb shell [Unix shell command]Seçili dosyaları geçici bir konuma kopyalamak ve sonra tüm dosyaları bu konumdan çekmek için kullanın .

Güncelleme:
Bir cp -u [source] [destination]sonraki çalıştırmada yalnızca değiştirilmiş dosyaları kopyalamak için unix shell komutunu kullanabilirsiniz . -rGerekirse, özyinelemeli alt dizinlerde kullanmak için bayrağı da kullanabilirsiniz .


Cevabınız için teşekkürler. Tüm dosyaları başka bir konuma kopyalamak, belki sadece bir dosyayı güncellemek oldukça yavaştır. Adb'nin yalnızca daha yeni dosyaları kopyalamayı kanıtlamadığı çok kötü.
OMA

@OMA Kabuğu, yeni dosyaların bir listesini almak için kullanabilir ve ardından adb pullbu listede kullanabilirsiniz .
Matthew,

@MatthewRead Bunun nasıl yapılacağıyla ilgili ipuçları var mı? Teşekkürler!
OMA

@OMA Bununla ilgili sorununuzu anlayamıyorum. Her iki komutu bir satırda kullanın veya takma ad oluşturun (işlemden sonra geçici konumu temizlemek için bir komut ekleyin). Bunun için bir adb çekme bayrağı olsaydı, aynı şekilde çalışırdı.
Android Quesito
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.