Comment transférer des photos sur mon appareil Android Jelly Bean tout en conservant l'horodatage d'origine?

25

J'ai récemment acheté un Nexus 4 et j'aimerais y transférer mes photos de mon ancien appareil. Mon précédent téléphone Android utilisait le stockage de masse USB standard, ce qui n'a posé aucun problème pour copier des trucs d'avant en arrière, mais le Nexus 4, comme de nombreux autres téléphones Android modernes, je suppose, utilise à la place MTP, qui a la caractéristique intéressante de refuser de copier l'original dates / horodatages des fichiers, en utilisant à la place la date à laquelle les fichiers sont copiés.

C'est évidemment une énorme déception en ce qui concerne les photos; non seulement parce que l'on ne peut pas vérifier la date d'origine à laquelle la photo a été prise lors de la navigation sur le téléphone, mais aussi parce qu'elles finissent par ne pas être triées.

Existe-t-il un moyen de transférer des photos vers un téléphone Android Jelly Bean qui ne prend pas en charge le stockage de masse USB en préservant les horodatages d'origine?

Ce que j'ai essayé jusqu'à présent:

  • Transfert via USB MTP
  • ADB push (à la fois les dossiers complets et les fichiers individuels)
  • Transfert via SSH (en utilisant SSHDroid + WinSCP)
  • Téléchargement et téléchargement depuis Dropbox
  • Transférer un fichier ZIP via MTP et décompresser le fichier sur le téléphone
  • Transfert depuis l'autre téléphone via Bluetooth
  • Fonction QuickPic "date fixe"
  • Synchronisation locale
  • Correction de la date de la photo
  • FTPSyncX
  • Signaux de fumée
  • Crier au téléphone

Aucun d'entre eux n'a conservé l'horodatage, ce qui me rend fou.

(De plus, je ne suis pas encore enraciné, mais si le seul moyen viable nécessite un root, j'accueillerais également cette réponse.)

Mahn
la source
Android prend-il en charge les fichiers .tar non tarés? Si oui, vous pouvez peut-être copier un fichier .tar des images. Je ne sais pas si le non-tarage changerait l'horodatage des fichiers individuels ou non.
Chance
@Chance a déjà essayé mais n'a pas aidé non plus; le problème est que rien n'a les privilèges pour écrire l'horodatage par défaut, donc il n'y a rien d'autre que l'enracinement en ce moment.
Mahn
Aussi, à tous ceux qui ont répondu dans cette question: merci. Le fonctionnement des sites SE Je ne peux accepter qu'une seule réponse, mais chaque réponse ici a aidé d'une manière ou d'une autre.
Mahn

Réponses:

10

Vous ne pouvez pas, il s'agit d'un problème d'autorisation actuel ( rapport de bogue ici ) du dossier s / scard d'Android 4.0 + s'il n'utilise pas FAT32 (mais FUSE).

Raison: il y a une transition de FAT32 vers un stockage utilisateur unifié pour les applications et les données multimédias (en utilisant ext4) sur un seul système de fichiers.

Nous nous sommes lassés de voir que les OEM incluent de nombreux Go de stockage interne pour la musique, alors que les utilisateurs manquaient encore d'espace pour les applications et les données. Cette approche nous permet de tout fusionner sur un seul volume, ce qui est bien mieux.

- Dan Morrill, ingénieur Android chez Google

Les anciennes propriétés FAT32 sont émulées à l'aide d'une couche FUSE pour être compatibles avec les applications existantes. De plus: / data / et / sdcard sur les appareils Google commençant par le Nexus 7 n'utilisent qu'une seule partition (/ data / media représente le contenu "sdcard" et est exposé en utilisant la couche FUSE aux applications).

Voici l' implémentation du pilote FUSE par CyanogenMod si vous souhaitez voir la source. Il semble que la définition des attributs d'horodatage soit implémentée.

EDIT: Cela ne fonctionne qu'avec root.

Raison exacte: tous les fichiers appartiennent à root.sdcard_rw (voir ici ).

Un appelant sans uid = 0 ne peut pas appeler le syscall utimensat () , il échoue déjà dans la couche VFS (EPERM) pour les horodatages autres que le courant:

  1. l'ID utilisateur effectif de l'appelant doit correspondre au propriétaire du fichier; ou
  2. l'appelant doit disposer des privilèges appropriés.

Pour effectuer une modification autre que la définition des deux horodatages à l'
heure actuelle (c'est-à-dire que l'heure n'est pas NULL et que les deux champs
tv_nsec ne sont pas UTIME_NOW et que les deux champs tv_nsec ne sont pas UTIME_OMIT), l'une
ou l' autre des conditions 2 ou 3 ci-dessus doit s'appliquer.

ce4
la source
Merci pour l'info, espérons que c'est quelque chose que Google peut et serait prêt à résoudre, car pour autant que je sache, le problème n'est pas la couche de fusibles ou le protocole mtp, mais les privilèges stricts qui y ont été définis, ce qui par le semble être assez récent (4.2.1?), car l'application Photo Date Correction publiée ci-dessous semble fonctionner avec des appareils plus anciens, basés sur des fusibles / mtp 4.0 tels que le Galaxy Nexus.
Mahn
2
Mise à jour pour les futurs lecteurs: cela reste non corrigé dans 4.2.2.
Mahn
2
Mise à jour pour encore plus de futurs lecteurs: non corrigé dans la guimauve 6.0.
Mahn
6

J'ai récemment rencontré ce problème sur un Nexus 5 et j'ai essayé la plupart des solutions répertoriées ici sans succès. Dans mon cas, cela semble être causé par un bogue reconnu avec le stock Android ( source ).

Ma solution était la suivante - j'ai utilisé Windows 8.1, mais aucune raison pour laquelle cela ne fonctionnerait pas sur OSX / Linux (la racine est cependant requise sur l'appareil).

  1. Sur votre PC, créez une archive .tar.gz de tous les fichiers que vous souhaitez transférer.

    • J'ai utilisé 7zip pour cela - Il convient de mentionner sous Windows, vous devrez d'abord créer l'archive .tar, puis appliquer la compression .gz.
  2. Transférez l'archive sur le périphérique via FTP, en vous assurant que la commande MFMT est utilisée.

    • Le serveur FTP prend en charge MFMT du côté de l'appareil. Installez et activez simplement, aucune configuration supplémentaire n'est requise.
    • Sur le PC, j'ai utilisé Filezilla - vous devez vous assurer que Transfert> Conserver les horodatages des fichiers transférés est vérifié.
  3. Sur l'appareil, extrayez l'archive dans un shell en tant que root.

    • À l'aide de l'émulateur de terminal , assurez-vous d'abord que vous disposez d'un accès root en utilisant la sucommande. Vous devrez peut-être accorder l'accès si SuperSU apparaît.
    • Accédez au répertoire contenant maintenant l'archive .tar.gz avec la commande cd, par exemple: cd /sdcard/
    • Extrayez l'archive à l'aide des éléments suivants: tar -xvf ARCHIVE_NAME_HERE.tar.gz
    • Remarque: Pour une raison quelconque, lorsque j'ai extrait directement dans le DCIM/Camerarépertoire, les images ne s'afficheraient pas du tout dans l'application de la galerie de stock. Si cela vous arrive, je vous suggère d'extraire dans un autre répertoire, puis de déplacer (et non de copier) les fichiers dans le répertoire de votre caméra. Je soupçonne que cela est dû à un problème d'autorisations. Vous pouvez utiliser le terminal ou le gestionnaire de fichiers de votre choix pour déplacer les fichiers.
  4. Redémarrez pour faire bonne mesure.

Cela a permis à tous les attributs de la date de modification des fichiers de rester intacts et de laisser toutes les photos dans le bon ordre lors de leur visualisation dans l'application de la galerie.

rmorrin
la source
Ils n'apparaissent pas dans la galerie en raison de l'index des médias. Il ne reconnaît pas le fonctionnement de votre terminal, mais si vous utilisez une application de gestion de fichiers, il signale les nouveaux fichiers déplacés à l'index et maintenant ils sont retrouvés. Êtes-vous sûr que la partie ftp est vraiment nécessaire? Je me demande parce que le ftp ne peut pas changer les fichiers qui sont à l'intérieur du tar, alors pourquoi cela devrait-il être important?
mgutt
@mgutt Je suppose que vous avez raison: la partie FTP n'est pas requise. Je rassemblais des informations provenant d'autres solutions de suggestion et c'est ce qui a fini par fonctionner pour moi!
rmorrin
4

Vérifiez les données EXIF ​​et voyez s'il y a un horodatage.

S'il y en a, la correction de la date de la photo vous permettra d'écraser l'horodatage du fichier bâclé avec celui EXIF, vous redonnant ainsi votre tri correct.

Compro01
la source
Rien. Les données EXIF ​​sont là, et l'application a réussi à modifier les horodatages lorsque je les ai utilisés, mais ils sont restés les mêmes; J'ai également redémarré et supprimé le cache de la galerie, mais cela n'a pas aidé. L'application a-t-elle besoin de root? Il semble qu'il y ait une sorte de protection en écriture sur les horodatages que rien ne peut surmonter.
Mahn
4

C'est une question qui me dérange beaucoup lorsque je rencontre des appareils qui n'ont que MTP mais pas le mode de stockage de masse. J'ai également des préoccupations à ce sujet pour exactement les mêmes raisons avec Mahn.

Après quelques tests, j'ai trouvé une solution temporaire qui peut peut-être conserver l'horodatage.

Il utilise le lecteur de carte sdcard / OTG excternal ainsi que la commande cp avec -a que l'horodatage pourra conserver. Mais l'exigence est que le téléphone doit être enraciné.

  1. Copiez d'abord les données sur SDcard.
  2. Lisez-le avec la fente pour carte mémoire / le lecteur de carte OTG
  3. utiliser le shell adb et acquérir l'autorisation root (su)
  4. cp -a * les données de la carte vers la mémoire interne.
Tomy
la source
4

Comme mentionné dans une autre réponse, sur les appareils qui utilisent FUSE pour l'émulation de carte SD (tels que les appareils Nexus modernes), seul root peut modifier les horodatages des fichiers dans /sdcard. Étant donné que des choses comme MTP et ADB ne s'exécutent pas en tant que root, vous ne pouvez pas conserver les horodatages avec ces méthodes. Cependant, si votre appareil est enraciné, vous pouvez corriger les horodatages avec une étape distincte par la suite.

Lors de la restauration d'une sauvegarde complète d' /sdcardun PC Linux sur ma tablette, j'ai utilisé cette commande pour corriger tous les horodatages après le téléchargement des fichiers avec adb push:

find . | while read file; do timestamp_stat=$(stat -c "%y" "$file"); timestamp=$(date +"%Y%m%d.%H%M%S" -d "$timestamp_stat"); echo "$timestamp: $file"; adb shell su -c "touch -t $timestamp \"/sdcard/$file\""; done

Cela doit être exécuté à partir de la racine du répertoire sur le PC qui correspond à /sdcardsur l'appareil. (Ou, si vous avez téléchargé autre chose qu'une /sdcardsauvegarde complète , changez le chemin dans la touchcommande vers la fin. Mais vous devez l'exécuter à partir du répertoire du PC correspondant au répertoire de la touchcommande.)

La façon dont cela fonctionne est qu'il parcourt tous les fichiers du côté PC, obtient l'horodatage de chacun et exécute une touchcommande en tant que root sur l'appareil pour y définir l'horodatage du fichier correspondant.

Notez que cela exécutera une sucommande distincte pour chaque fichier individuel. Si la journalisation est activée dans votre programme racine (par exemple, SuperSU), vous souhaiterez peut-être la désactiver pour éviter de produire un grand nombre d'entrées de journal. Et si votre appareil est configuré pour demander une confirmation à chaque sudemande, vous voudrez probablement changer cela temporairement. (Il peut être possible de proposer une variante qui canalise un flux de touchcommandes dans un seul shell racine sur l'appareil, mais la manière simple de le faire n'a pas fonctionné lorsque je l'ai essayé, et je ne voulais pas dépenser beaucoup de temps dessus.)

Je l'ai utilisé avec succès sur un Nexus 10 fonctionnant sous Android 5.1.

Wyzard - Stop Harming Monica--
la source
2

J'ai exactement le même problème. Il semble qu'il soit bloqué par un fusible sur le Nexus 4 exécutant Stock JellyBean 4.2.1.

SYMLINKS:
/sdcard -> /storage/emulated/legacy
/storage/emulated/legacy -> /mnt/shell/emulated/0

MOUNT POINT:
/mnt/shell /dev/fuse /mnt/shell/emulated fuse \
    rw,nosuid,nodev,relatime,user_id=****,group_id=****,default_permissions,allow_other 0 0

Cette information a été prise via une session shell adb; Je suppose que le fusible sera dans le mélange pour tous les comptes au niveau de l'application.

TL; DR À première vue, cela ne peut pas être fait sans enraciner le téléphone.

Tortue
la source
1
Ma «solution» pour le moment est de télécharger les photos des anciens téléphones un par un dans un ordre chronologique, avec des pauses entre les deux, dans un répertoire différent. Voici le script shell Linux que j'utilise: [old_pictures]$ for f in $(ls -1 * | sort -t _ -k 2); do adb push $f /storage/sdcard0/DCIM/Past/; sleep 3; done; Si vous suivez cette voie, effectuez d'abord un test de téléchargement pour vous assurer que vous êtes satisfait. Désactivez également Google+ Instant Upload pendant que vous y êtes afin de ne pas obtenir de "doubles téléchargements".
Turtle
Merci, ça aide; comme votre script: à la fois mtp via windows et adb push abandonnent la connexion pour moi après le premier millier de fichiers dans mon cas, plus certains fichiers finissent par être corrompus au hasard, voyez-vous la même chose? essentiellement comme le décrit ce problème ici: code.google.com/p/android/issues/detail?id=35185 (je devrais peut-être poser une question distincte, car cela n'est pas directement lié aux horodatages eux-mêmes. Je dois quand même aimer mtp)
Mahn
2

Si vous utilisez l'application Google Photo et que vous souhaitez que votre fichier soit répertorié dans le bon ordre, il existe une solution.

Le fond du problème

Ceci est un bug Android. Il ne permet pas aux utilisateurs non root de changer la date de modification des fichiers ( https://code.google.com/p/android/issues/detail?id=18624 depuis l'introduction du multi-utilisateur / sandbox avec le système de fichiers FUSE) . Et ne conserve pas l'horodatage lors de la copie de fichiers avec le protocole MTP ( https://code.google.com/p/android/issues/detail?id=92635 ).

La solution de contournement pour les utilisateurs de Google Photo

Les photos sont commandées en utilisant les informations EXIF ​​si elles sont disponibles, vous pouvez donc simplement utiliser toutes les manières de leur donner les bonnes données EXIF. N'importe quel appareil photo doit régler cela automatiquement pour vous, assurez-vous simplement que la date / heure est correcte.

Pour les vidéos ou si vous ne souhaitez pas définir les données EXIF, accédez simplement à https://photos.google.com/ et téléchargez vos vidéos / photos à partir de là. Il préserve l'horodatage de modification que vous avez sur votre ordinateur et puisqu'il est synchronisé avec votre appareil, vous verrez la photo dans l'application, correctement triée, dès que vous avez terminé le téléchargement.

Daniele Segato
la source
1

Utilisez un outil de synchronisation comme par exemple FolderSync , qui devrait prendre soin des horodatages en conséquence. Les outils de synchronisation doivent être spécialisés dans la gestion de tous les aspects de la maintenance réelle des copies synchrones - y compris les horodatages, bien sûr.

Izzy
la source
J'ai essayé quelques outils de synchronisation, mais aucun n'a synchronisé l'horodatage, car je suppose qu'il existe une sorte de protection. Merci pour la réponse.
Mahn
Avez-vous essayé la version d' essai de FTPSyncX ? Pas le look le plus sophistiqué peut-être (le développeur n'est pas un designer). Mais j'utilise le Pro depuis environ un an déjà, et il synchronise très bien les horodatages via SFTP / SSH (le seul protocole que j'utilise - l'application peut en gérer plus).
Izzy
Je vais le vérifier, mais étant donné que SSHDroid n'a pas fonctionné pour moi, je suppose que je n'aurai pas non plus les horodatages.
Mahn
Je parie presque que ça le sera. Je me souviens encore à quel point cette partie était difficile pour le développeur - nous avons passé des heures sur Skype à discuter du problème :) Il y avait ce vilain problème de temps sur Windows, qui rapportait parfois des choses à tort ... Oh, obtenir OT :) Essayez simplement, ne peut pas faire de mal, non? Et laissez-nous savoir comment cela a fonctionné ...
Izzy
Rien. Essai FTPSyncX en tant que client sur le téléphone, freeSSHd en tant que serveur sur mon ordinateur portable, je peux connecter et synchroniser des fichiers via STP / SSH, mais l'horodatage des images transférées sur le téléphone est toujours écrasé par la date actuelle.
Mahn
1

DATE DE CONSERVATION MODIFIÉE SUR LE DISPOSITIF NEXUS --- AUCUNE RACINE REQUISE ---

  • D'Android au PC: utilisez MTP
  • Du PC à Android: utilisez Droid Explorer

à votre santé.. :)

il conserve la date de modification. Je ne sais pas comment Droid Explorer le fait. mais ça marche.

assurez-vous que le débogage USB est coché avant d'utiliser Droid Explorer.

euh ... il y a une limitation cependant ... Droid Explorer ne peut transférer que des fichiers, pas des dossiers.

  • avec Droid Explorer, copiez les fichiers dans le téléphone Android sur un dossier spécifique
  • puis avec le gestionnaire de fichiers dans Android, déplacez ces fichiers dans le dossier que nous voulons, n'utilisez pas la copie car la copie modifiera la date de modification tandis que la coupe ne le fait pas.
user43362
la source
Droid Explorer nécessite ROOT, n'est-ce pas?
AntonK
@AntonK Oui Droid Explorer a besoin de Root pour conserver l'horodatage. Si Root n'est pas disponible, il écrasera la date: maxrev.de/…
mgutt
1

Utilisez PTP au lieu de MTP lors de la connexion de votre téléphone par USB. Cela fonctionne pour moi, j'utilise un Samsung Note 4 connecté à une machine Ubuntu 14.04. Cependant, la connexion en tant que PTP ne permet que la copie de photos / images. Toutes les autres méthodes de copie de fichiers (Bluetooth, WIFI, gestionnaire de fichiers) sur un lecteur externe changeront la date.

Tropique
la source
J'ai testé cela avec Windows 10 et une note 3 en utilisant CM 12.1 (Android 5.1.1). J'ai déplacé les fichiers (la seule façon dont Windows permet de les conserver) mais cela n'a pas conservé les horodatages. :(
mgutt
0

Ma solution pour conserver la date de modification lors de la copie de fichiers sur un appareil Android avec MTP:

Testé sur stock LG G2 (sans root), Andorid 4.4.2 et HTC One M7, Andorid 4.4.2:

  1. Partage réseau du dossier à copier sur l'ordinateur (Win 8)
  2. Utilisez SyncMe Wireless pour copier des fichiers de l'ordinateur vers l'appareil

Pour autant que je puisse voir, les dates de modification sont entièrement conservées!

Cédric
la source
0

Solution de sauvegarde utilisant "SanDisk Memory Zone" pour conserver la date d'horodatage. copier / déplacer des fichiers depuis un appareil Android vers une carte SD externe - Testé sur Samsung Note 2, Note 3 et Mini SIII

Il vous suffit de sauvegarder vos fichiers photo sur SDCard et de déplacer la carte vers un autre appareil Android, PC, Apple ou autre. Si vous ne l'utilisez pas pour sauvegarder vos fichiers photo, suivez ces simples instructions en 8 étapes "

  1. Recherchez sur Google Play et installez "SanDisk Memory Zone".
  2. Démarrez l'application et attendez la fin du fichier d'index.
  3. Sélectionnez Sauvegarde / Restauration et modifiez ou marquez les paramètres.
  4. Sélectionnez la destination de la carte mémoire et les éléments à sauvegarder (contacts, sms, photos, musique, etc.).
  5. Vérifiez la capacité requise et disponible et continuez sur CONTINUER.
  6. Attendez la fin de la sauvegarde.
  7. Vous avez maintenant une copie des fichiers dans votre carte SD sur ".memoryzone_backup / files / 1"
  8. Vous pouvez maintenant déplacer vos fichiers de carte SD comme des photos vers votre Windows, Linux ou tout autre appareil Android en préservant l'horodatage d'origine.
Stackguest50
la source
la copie de fichiers sur des cartes SD externes ne cause pas le problème avec l'horodatage de modification
AntonK
0

Solution simple et rapide: utilisez simplement un PC ou un Mac pour copier les fichiers de l'ancienne carte SD (ou PC) vers la nouvelle carte SD. Utilisez un PC / Mac avec un lecteur / graveur de carte SD (il existe des convertisseurs de carte USB vers SD) qui considère la carte comme un stockage USB FAT32. Une fois la copie terminée, réinsérez la nouvelle carte dans votre téléphone et redémarrez.

PJ_Finnegan
la source
0

Je suis passé à un Moto X 2014 et j'ai eu ce problème.

J'ai aussi essayé beaucoup de choses, une solution semblait être "Motorola Migrate" pour synchroniser avec WiFi deux téléphones (un vieux backflip en pain d'épice). Dans la galerie, la situation était bonne (même dans les détails), mais étrangement dans le gestionnaire de fichiers, la date a été modifiée, et après quelques heures, même la galerie a également montré la date de transfert.

La solution de contournement, si les fichiers ne sont pas trop nombreux, pourrait être copiée manuellement un par un, en changeant à chaque fois la date et l'heure sur le téléphone.

Antonio
la source
0

J'ai un Nexus 4 et j'ai eu le même problème avec l'horodatage et les photos (en effet tous les fichiers).

Voici les lignes de commande (avec un téléphone rooté) que j'ai utilisées, grâce à un post sur Ubuntu:

sudo apt-get install android-tools-adb

(sur Ubuntu si le SDK Android n'est pas installé)

adb devices
cd /media/my_backup_folder_where_i_put_a_folder_with_all_my_data_named_"savandroid"_in_it

Pour aller dans mon dossier "backup" qui contient le dossier "savandroid"

adb root
adb push savandroid /sdcard

Tous les fichiers et dossiers qui sont dans "saveandroid" sont envoyés sur la carte SD fonctionnaient bien avec tous les horodatages corrects!

Remarque : Sur Cyanogenmod, j'ai dû sélectionner root pour "apps and adb" dans le menu des développeurs. Par défaut, il n'est défini que sur les applications.

Pao
la source
0

Je vais ajouter ma solution qui a fonctionné sur Ubuntu

Installez d'abord simple-mtpfs et installez fuse

cd ~
mkdir myphone
simple-mtpfs ~/myphone

Vous avez maintenant vos dossiers de téléphone montés sur ce répertoire, vous pouvez utiliser rsync -t, ou cp -ppour copier les images et les heures créées / modifiées / accessibles ne seront pas changées.

Travaille pour moi :)

Oren
la source
Dans le terminal, tandis qu'ils sont montés avec simple-mtpfs, les horodatages apparaissent comme préservés. Mais lors de l'accès aux fichiers du téléphone, les horodatages semblent tous réinitialisés.
Teresa e Junior
0

Pour copier des fichiers de votre Android vers votre PC en gardant des horodatages:

adb shell tar c -C /storage/emulated/0/XXX . | tar xv

Pour les restaurer sur Android:

tar c . | adb shell tar xv -C  /storage/emulated/0/XXX 

Cela fonctionne en créant un fichier tar dans l'appareil, qui est immédiatement extrait sur votre hôte et vice versa.

Le "v" vous permet de voir le nom du fichier copié.

Bien sûr, cela suppose que "adb" est installé, que le débogage USB est activé sur le téléphone et que vous avez déjà validé le certificat de débogage.

sudo apt install adb
Raúl Salinas-Monteagudo
la source
-1

Essayez l'application "Transfert de fichiers Bluetooth", elle conserve la date modifiée avec le déplacement. Et je crois aussi avec copie mais essayez d'abord avec un fichier / dossier pour vous en assurer. Il peut également explorer l'autre appareil via Bluebooth.

Client
la source
Fournir un lien vers les applications que vous recommandez en ferait une réponse plus utile.
eldarerathis
-1

Utilisez SyncMe Wireless et le partage réseau. Les horodatages sont conservés et la synchronisation est rapide. J'ai pu sauvegarder sans ordinateur sur la carte SD de Kingston MobileLite Wireless en 20 minutes, resynchroniser instantanément.

Richard Cannon
la source
Pouvez-vous lier cette application?
Matthew Read
Je ne pouvais trouver que le lien pour SyncMe Wireless , mais pas "Partage réseau", sauf si vous vouliez dire qu'il s'agissait d'une seule application. Fournissez également le bref résumé de l'application et les étapes à suivre si possible.
Andrew T.