1 votos

adb pull no respeta la barra final, push ignora los permisos

Si utilizo

adb push mydir/ /sdcard/Documents/

el resultado es el esperado: todos los archivos de dentro de mydir/ acaban dentro /sdcard/Documents/ (sólo los permisos no se mantienen, incluso no cuando se utiliza -a ; en la sdcard interna todo se convierte en 0660 mientras que en la sdcard externa todo está configurado a 0771 - lo que podría ser una limitación de sdcardfs ya que ni siquiera chmod 0764 en el dispositivo tiene algún efecto). Pero la otra dirección es extraña: usando

adb pull /sdcard/Documents/ mydir/

hace que los archivos aparezcan dentro de mydir/Documents/ lo cual es bastante inesperado. He jugado con todas las combinaciones de barras diagonales finales (incluso sin barras diagonales finales), no hay dados. Incluso he probado diferentes versiones de adb (pensando que el utilizado podría tener un error). Lo mismo ocurre cuando se utiliza la sdcard externa, por lo que no es el symlink ( /sdcard -> /storage/self/primary ) engañándolo.

¿Alguna pista de lo que podría estar mal aquí? Cuando busco en la red, todos los hallazgos sugieren que debería funcionar como espero, pero de alguna manera no lo hace. ¿Cómo tendría que ajustar por encima de adb pull para que todos los archivos /sdcard/Documents/ aparecen localmente dentro de mydir/ pero no el Documents/ como subdirectorio? Y: ¿Cómo mantener los permisos como están?

2voto

Izzy Puntos 45544

Tardé casi un día entero en encontrar una solución en parte bastante accidental. Al añadir un comodín ( adb pull /sdcard/Documents/* ) sólo conduce a un error, añadir un punto conduce al resultado previsto:

adb pull /sdcard/Documents/. mydir/

tiene el archivos (y subdirectorios) dentro de /sdcard/Documents apareciendo en mydir/ pero no el Documents ( aquí al escribir mi pregunta y comprobar las "preguntas similares" sugeridas).

También es útil en este contexto: adb push admite un --sync (para transferir sólo los archivos más nuevos y actualizados) - y aunque no está documentado, adb pull también lo apoya ¹ (pero necesita -a además de mantener intactas las marcas de tiempo). Así que las soluciones bastante complicadas o herramientas externas del pasado ya no son necesarios.

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

No --delete (por ejemplo, con el apoyo de rsync - si alguien lo necesita, puede dar herramientas de terceros como mejor-adb-sync un intento).

En cuanto a los permisos, parece que conservarlos no es posible. Con mucho gusto me corrijo en ese punto si alguien tiene una solución para ello.

¹ Actualización: haciendo algunas pruebas parece --sync es simplemente ignorado en silencio con adb pull aunque no se produzca ningún error: los archivos más nuevos en el objetivo han sido sobrescritos. No estoy seguro de si la implementación está prevista, pero con r27 (la primera versión adb pull ya no se quejaba --sync sería una opción no válida) se lance en 2018 yo 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