18 votos

¿Cómo extraer sólo los archivos más recientes con "adb pull"? (Utilidad del SDK de Android)

Con el comando adb pull /sdcard/ Puedo copiar todo el contenido de la memoria interna de mi teléfono Android en mi directorio local actual.

Y adb pull /mnt/extSdCard/ hace lo mismo con la tarjeta SD externa. Pero ese comando siempre copia todo, incluso los archivos que ya tengo almacenados localmente.

¿Hay alguna forma de copiar sólo los archivos nuevos y modificados? (archivos con un fecha más reciente )

10voto

Anne van Rossum Puntos 216

Como se describe por ss-3-1415926535897932384626433 no hay ninguna bandera, pero usted tiene que obtener una lista de archivos en primer lugar y luego comprobar si sus archivos locales coinciden. Escribí un pequeño script para ello:

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

Ajustar la carpeta remota rfolder y la carpeta local lfolder a lugares de su elección.

9voto

David Paige Puntos 18

Adb-sync - pequeño, pero potente script python que puede hacer todo lo que pides y más... https://github.com/google/adb-sync

4voto

S S Puntos 8975

adb pull no parece proporcionar una bandera para tirar de los archivos seleccionados .

Como solución alternativa, puede hacer lo siguiente: Utilice adb shell [Unix shell command] para copiar los archivos seleccionados en una ubicación temporal y, a continuación, extraer todos los archivos de esa ubicación.

Actualización:
Puede utilizar cp -u [source] [destination] comando de shell unix para copiar sólo los archivos modificados en la siguiente ejecución. También puede utilizar -r para utilizarlo en subdirectorios de forma recursiva, si es necesario.

0 votos

Gracias por su respuesta. Copiar todos los archivos a otra ubicación para luego actualizar tal vez sólo un archivo modificado es bastante lento. Lástima que adb no provice en forma de copiar sólo los archivos más recientes.

0 votos

@OMA Puede utilizar el intérprete de comandos para obtener una lista de archivos nuevos y, a continuación, utilizar adb pull en esa lista.

0 votos

@MatthewRead ¿Alguna pista sobre cómo hacerlo? Gracias.

2voto

Izzy Puntos 45544

Aunque no está completamente documentado, a partir de 27.0.1 aka platform tools r27 (no antes) se puede utilizar lo siguiente:

adb push --sync local/ device/
# adb pull --sync -a device/. local/

(observe el punto final en adb pull sin eso terminarías con local/device/* , ver aquí ; también el -a sólo es necesario aquí para mantener intactas las marcas de tiempo de los archivos)

No está directamente relacionado con adb push : no se conservan los permisos de los archivos, lo que probablemente se deba al sistema de archivos utilizado. Los archivos transferidos a la tarjeta SD interna siempre tendrán el valor 0660 y en la tarjeta externa a 0771 que ni siquiera pude cambiar con adb shell chmod en el propio dispositivo (aunque tampoco recibí ningún error al intentarlo).

Si necesita más opciones, tal vez las conozca en rsync (por ejemplo --delete o --exclude ), también puedes echar un vistazo al script de Python mejor-adb-sync .

Actualización: haciendo algunas pruebas parece --sync simplemente se ignora con adb pull aunque no se produzca ningún error: se han sobrescrito los archivos más nuevos del objetivo. No estoy seguro de si la implementación está prevista, pero con la r27 saliendo en 2018 no apostaría por ello. Con push Sin embargo, funciona como se anuncia.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X