17 votes

Comment tirer uniquement les fichiers les plus récents avec "adb pull" ? (utilitaire Android SDK)

Avec la commande "adb pull /sdcard/", je peux copier tout le contenu de la mémoire interne de mon téléphone Android dans mon répertoire local actuel (et "adb pull /mnt/extSdCard/" fait de même avec la carte SD externe). Mais cette commande copie toujours tout, même les fichiers que j'ai déjà stockés localement.

Existe-t-il un moyen de copier uniquement les fichiers nouveaux et modifiés ? (fichiers dont la date est plus récente)

10voto

Anne van Rossum Points 226

Comme décrit par ss-3-1415926535897932384626433 il n'y a pas de drapeau, mais vous devez d'abord obtenir une liste de fichiers et ensuite vérifier si vos fichiers locaux correspondent. J'ai écrit un petit script pour cela :

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

Régler le dossier à distance rfolder et le dossier local lfolder à des endroits de votre choix.

0 votes

Cela semble assez bon. Est-ce que ça fonctionne aussi de manière récursive ou seulement dans un seul répertoire et sans sous-répertoire ?

0 votes

Cette méthode n'est pas récursive, mais vous pouvez l'améliorer :-)

0 votes

Notez également que je ne compare pas encore les dates ici, donc si vous avez des fichiers modifiés, ils ne seront pas mis à jour.

9voto

Adb-sync - petit, mais puissant script python qui peut faire tout ce que vous demandez et plus encore... https://github.com/google/adb-sync

0 votes

Bien que le lien soit peut-être la réponse pour cet utilisateur, il est préférable d'expliquer en détail la méthode et le processus à suivre pour que cela fonctionne. Android.stackexchange.com/help/how-to-answer

1 votes

Merci pour la mention. J'ai dû apporter plusieurs modifications au code source pour le faire fonctionner dans mon cas d'utilisation (chemins invalides pour Windows provoquant un crash, erreur de version de Python apparemment, etc -- pour plus de détails, voir les problèmes que j'ai commentés), mais c'était finalement la seule façon de récupérer mes fichiers à partir d'une partition de données corrompue. (l'extraction par adb de l'ensemble du répertoire se plantait sur plusieurs fichiers, et je ne voulais pas avoir à supprimer manuellement chacun d'entre eux puis relancer l'ensemble du transfert -- avec adb-sync [+mes modifications], il échouait juste sur ce fichier puis continuait).

4voto

Galaxy Z Flip 3 Points 12200

adb pull ne semble pas fournir un drapeau pour tirer les fichiers sélectionnés .

Comme solution de rechange, vous pouvez faire ceci : Utilisez adb shell [Unix shell command] pour copier les fichiers sélectionnés vers un emplacement temporaire, puis extraire tous les fichiers de cet emplacement.

Mise à jour :
Vous pouvez utiliser cp -u [source] [destination] commande shell unix pour copier uniquement les fichiers modifiés lors de la prochaine exécution. Vous pouvez également utiliser -r pour l'utiliser sur les sous-répertoires de manière récursive, si cela est nécessaire.

0 votes

Merci pour votre réponse. Copier tous les fichiers vers un autre emplacement pour ensuite peut-être mettre à jour un seul fichier modifié est assez lent. Dommage que adb ne permette pas de copier uniquement les fichiers les plus récents.

0 votes

@OMA Vous pouvez utiliser le shell pour obtenir une liste des nouveaux fichiers, puis utiliser adb pull sur cette liste.

0 votes

@MatthewRead Des conseils sur la façon de faire ça ? Merci !

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X