Come estrarre solo i file più recenti con "adb pull"? (Utilità SDK Android)


12

Con il comando "adb pull / sdcard /" posso copiare tutto il contenuto della memoria interna del mio telefono Android nella mia directory locale corrente (e "adb pull / mnt / extSdCard /" fa lo stesso con la scheda SD esterna). Ma quel comando copia sempre tutto, anche i file che ho già archiviato localmente.

Esiste un modo per copiare solo i file nuovi e modificati? (file con una data più recente)

Risposte:


8

Come descritto da ss-3-1415926535897932384626433 non è presente alcun flag, ma è necessario prima ottenere un elenco di file e quindi verificare se i file locali corrispondono. Ho scritto una piccola sceneggiatura per questo:

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

Regola la cartella remota rfoldere la cartella locale lfolderin posizioni a tua scelta.


Questo sembra abbastanza buono. Funziona anche in modo ricorsivo o solo in una singola directory e senza sottodirectory?
OMA,

Questo è davvero non ricorsivo, ma sentiti libero di migliorare. :-)
Anne van Rossum,

Nota anche che non ho ancora confrontato le date qui, quindi se hai file modificati non verranno aggiornati.
Anne van Rossum,

6

adb-sync - script Python piccolo ma potente che può fare tutto ciò che ti viene chiesto e altro ancora ... https://github.com/google/adb-sync


Sebbene il link sia forse la risposta per questo utente, è meglio spiegare a fondo il metodo e il processo da seguire per farlo funzionare. android.stackexchange.com/help/how-to-answer
acejavelin

Grazie per la menzione. Ho dovuto apportare diverse modifiche al codice sorgente per farlo funzionare per il mio caso d'uso (percorsi non validi per Windows che causavano crash, apparentemente mancata corrispondenza della versione di Python, ecc. - per i dettagli, vedere i problemi in cui ho commentato), ma alla fine è stato l'unico modo in cui sono stato in grado di recuperare i miei file da una partizione di dati danneggiata. (l'estrazione di adb dell'intera directory si arresterebbe in modo anomalo su vari file e non volevo eliminarli manualmente, quindi riavviare l'intero trasferimento - con adb-sync [+ le mie modifiche] fallirebbe solo quel file poi continua)
Venryx il

4

adb pull non sembra fornire un flag per estrarre i file selezionati .

Per ovviare a questo problema, è possibile: Utilizzare adb shell [Unix shell command]per copiare i file selezionati in un percorso temporaneo e quindi estrarre tutti i file da quel percorso.

Aggiornamento:
è possibile utilizzare il cp -u [source] [destination]comando shell unix per copiare solo i file modificati alla successiva esecuzione. Puoi anche usare -rflag per usarlo su sottodirectory ricorsive, se necessario.


Grazie per la tua risposta. Copiare tutti i file in un'altra posizione per poi forse aggiornare solo un file modificato è piuttosto lento. Peccato che adb non sia in grado di copiare solo i file più recenti.
OMA,

@OMA È possibile utilizzare la shell per ottenere un elenco di nuovi file, quindi utilizzare adb pulltale elenco.
Matteo Leggi il

@MatthewRead Qualche suggerimento su come farlo? Grazie!
OMA,

@OMA Non riesco a capire il tuo problema con questo. Utilizzare entrambi i comandi in una riga o creare un alias (aggiungere anche un comando per eliminare la posizione temporanea dopo l'operazione). Se ci fosse una bandiera di adb pull per quello, funzionerebbe allo stesso modo.
Android Quesito
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.