1 votes

adb pull n'honore pas la barre oblique, push ignore les permissions

Si j'utilise

adb push mydir/ /sdcard/Documents/

le résultat est conforme aux attentes : tous les fichiers à l'intérieur de mydir/ se retrouvent à l'intérieur /sdcard/Documents/ (les autorisations ne sont pas conservées, même si l'on n'utilise pas la fonction -a ; sur la carte SD interne, tout est transformé en 0660 alors que sur la carte SD externe, tout est réglé sur 0771 - ce qui pourrait être une limitation de sdcardfs, puisque même les chmod 0764 sur l'appareil n'a aucun effet). Mais l'autre sens est bizarre : en utilisant

adb pull /sdcard/Documents/ mydir/

les fichiers apparaissent à l'intérieur de mydir/Documents/ , ce qui est plutôt très inattendu. J'ai joué avec toutes les combinaisons de barres obliques (y compris sans aucune barre oblique), sans succès. J'ai même essayé différentes versions de adb (en pensant que celui utilisé pourrait avoir un bug). La même chose se produit quand on utilise la carte SD externe, donc ce n'est pas le lien symbolique ( /sdcard -> /storage/self/primary ) en le trompant.

Une idée de ce qui pourrait se passer ? Lorsque je fais des recherches sur le net, toutes les conclusions suggèrent que cela devrait fonctionner comme prévu, mais ce n'est pas le cas. Comment dois-je ajuster les éléments ci-dessus ? adb pull de sorte que tous les fichiers de l'intérieur de /sdcard/Documents/ se présenter localement à l'intérieur mydir/ mais pas le Documents/ lui-même en tant que sous-répertoire ? Et.. : Comment maintenir les autorisations en l'état ?

2voto

Milner Points 533

Il m'a fallu presque une journée entière pour trouver une solution partielle, un peu par hasard. En ajoutant un joker ( adb pull /sdcard/Documents/* ) conduit à une erreur, alors que l'ajout d'un point conduit au résultat escompté :

adb pull /sdcard/Documents/. mydir/

a le dossiers (et ses sous-répertoires) à partir de /sdcard/Documents apparaissant dans mydir/ mais pas le Documents lui-même ( trouvé ici lors de la rédaction de ma question et de la vérification des "questions similaires" proposées).

Également utile dans ce contexte : adb push soutient un --sync (pour ne transférer que les fichiers plus récents et mis à jour) - et bien qu'elle ne soit pas documentée, adb pull le soutient également ¹ (mais nécessite -a en plus de conserver les horodatages intacts). Par conséquent, les solutions de contournement ou les outils externes plutôt compliqués du passé ne sont plus nécessaires.

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

Non --delete (comme par exemple dans le cas de la fonction rsync - si quelqu'un en a besoin, il est possible de donner des outils tiers comme meilleur-adb-sync un essai).

Quant aux autorisations, il semble qu'il ne soit pas possible de les conserver. J'accepte volontiers d'être corrigé sur ce point si quelqu'un a une solution.

¹ Mise à jour : En effectuant quelques tests, il semble que --sync es simplement ignoré en silence con adb pull même si aucune erreur n'est déclenchée : les fichiers plus récents sur la cible ont été écrasés. Je ne sais pas si une mise en œuvre est prévue, mais avec la r27 (la première version adb pull ne se plaignait plus --sync serait une option non valable) en 2018, je ne parierais pas là-dessus. Avec push Il fonctionne cependant comme indiqué dans la publicité.

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