¿Cómo puedo transferir fotos a mi dispositivo Android Jelly Bean conservando la marca de tiempo original?

Hace poco compré un Nexus 4 y me gustaría transferirle las fotos de mi dispositivo anterior. Mi teléfono Android anterior usaba el almacenamiento masivo USB estándar que no daba problemas para copiar cosas de un lado a otro, pero el Nexus 4, como muchos otros teléfonos Android modernos, supongo, usa MTP en su lugar, que tiene la característica interesante de negarse a copiar el original. fechas/marcas de tiempo de los archivos, utilizando en su lugar la fecha en la que se copian los archivos.

Obviamente, esto es un gran fastidio cuando se trata de fotos; no solo porque uno no puede verificar la fecha original en la que se tomó la foto mientras navega por el teléfono, sino también porque terminan completamente desordenados.

¿Hay alguna forma de transferir fotos a un teléfono Android Jelly Bean que no admita el almacenamiento masivo USB conservando las marcas de tiempo originales?

Cosas que he probado hasta ahora:

  • Transferencia a través de USB MTP
  • ADB push (tanto carpetas completas como archivos individuales)
  • Transferencia a través de SSH (usando SSHDroid + WinSCP)
  • Subir y descargar desde Dropbox
  • Transferir un archivo ZIP a través de MTP y descomprimir el archivo en el teléfono
  • Transferir desde el otro teléfono a través de bluetooth
  • Función QuickPic "fijar fecha"
  • sincronización local
  • Corrección de la fecha de la foto
  • FTPSyncX
  • Señales de humo
  • gritando al telefono

Ninguno de ellos conservó la marca de tiempo, y esto me está volviendo loco.

(Además, todavía no estoy rooteado, pero si la única forma viable requiere root, también agradecería esa respuesta).

¿Admite Android la eliminación de archivos .tar? Si es así, tal vez podría copiar un archivo .tar de las imágenes. No sé si el destareado cambiaría la marca de tiempo de los archivos individuales o no.
@Chance lo intentó antes pero tampoco ayudó; el problema es que nada tiene privilegios para escribir la marca de tiempo de forma predeterminada, por lo que no se puede hacer nada más que rootear en este momento.

Respuestas (20)

No puede, este es un problema de permiso actual ( informe de error aquí ) de la carpeta /sdcard de Android 4.0+ si no está usando FAT32 (pero FUSE).

Motivo: hay una transición de FAT32 a almacenamiento de usuario unificado para aplicaciones y datos multimedia (usando ext4) en un solo sistema de archivos.

Nos cansamos de ver que los OEM incluyen muchos GB de almacenamiento interno para música, mientras que los usuarios todavía se estaban quedando sin espacio para aplicaciones y datos. Este enfoque nos permite fusionar todo en un solo volumen, lo cual es mucho mejor.

-- Dan Morrill, ingeniero de Android en Google

Las antiguas propiedades FAT32 se emulan mediante una capa FUSE para que sean compatibles con las aplicaciones existentes. Además: /data/ y /sdcard en los dispositivos de Google a partir de Nexus 7 usan una única partición (/data/media representa el contenido de la "tarjeta sd" y se expone mediante la capa FUSE a las aplicaciones).

Aquí está la implementación de CyanogenMod del controlador FUSE si está interesado en ver la fuente. Sin embargo, parece que se implementó la configuración de atributos de marca de tiempo.

EDITAR: Solo funciona con root.

Motivo exacto: todos los archivos son propiedad de root.sdcard_rw (ver aquí ).

Una persona que llama sin h uid = 0 no puede llamar al syscall utimensat() , ya falla en la capa VFS (EPERM) para las marcas de tiempo que no sean las actuales:

  1. el ID de usuario efectivo de la persona que llama debe coincidir con el propietario del archivo; o
  2. la persona que llama debe tener los privilegios apropiados.

Para realizar cualquier cambio que no sea establecer ambas marcas de tiempo en la
hora actual (es decir, times no es NULL, y ambos campos tv_nsec no son
UTIME_NOW y ambos campos tv_nsec no son UTIME_OMIT), se
deben aplicar las condiciones 2 o 3 anteriores.

Gracias por la información, esperemos que esto sea algo que Google pueda y esté dispuesto a abordar, porque, por lo que sé, el problema no es la capa de fusible o el protocolo mtp, sino los privilegios estrictos que se establecieron allí, que por el parece ser bastante reciente (¿4.2.1?) ya que la aplicación Photo Date Correction publicada a continuación parecía funcionar con dispositivos más antiguos basados ​​en 4.0 fuse/mtp, como el galaxy nexus.
Actualización para futuros lectores: esto permanece sin arreglar en 4.2.2.
Actualización para aún más futuros lectores: sin arreglar en 6.0 marshmallow.

Recientemente encontré este problema en un Nexus 5 y probé la mayoría de las soluciones enumeradas aquí sin suerte. En mi caso, parece ser causado por un error reconocido con stock de Android ( fuente ).

Mi solución fue la siguiente: usé Windows 8.1, pero no hay razón para que esto no funcione en OSX/Linux (sin embargo, se requiere root en el dispositivo).

  1. En su PC, cree un archivo .tar.gz de todos los archivos que desea transferir.

    • Usé 7zip para esto. Vale la pena mencionar que en Windows, primero deberá crear el archivo .tar y luego aplicar la compresión .gz.
  2. Transfiera el archivo al dispositivo mediante FTP, asegurándose de utilizar el comando MFMT.

    • El servidor FTP admite MFMT en el lado del dispositivo. Simplemente instale y habilite, no se necesita configuración adicional.
    • En la PC, usé Filezilla ; debe asegurarse de que Transferir> Conservar marcas de tiempo de los archivos transferidos esté marcado.
  3. En el dispositivo, extraiga el archivo en un shell como root.

    • Usando Terminal Emulator , primero asegúrese de tener acceso de root usando el sucomando. Es posible que deba otorgar acceso si aparece SuperSU.
    • Navegue al directorio que ahora contiene el archivo .tar.gz con el comando cd, por ejemplo:cd /sdcard/
    • Extraiga el archivo usando lo siguiente:tar -xvf ARCHIVE_NAME_HERE.tar.gz
    • Nota: Por alguna razón, cuando extraje directamente al DCIM/Cameradirectorio, las imágenes no aparecían en absoluto en la aplicación de la galería de valores. Si esto le sucede, le sugiero que extraiga a un directorio diferente y luego mueva (no copie) los archivos al directorio de su cámara. Sospecho que esto se debe a un problema de permisos. Puede usar la terminal o el administrador de archivos de su elección para mover los archivos.
  4. Reinicie por si acaso.

Esto permitió que todos los atributos de 'fecha de modificación' de los archivos permanecieran intactos y dejó todas las fotos en el orden correcto cuando se vieron en la aplicación de la galería.

No aparecen en la galería debido al índice de medios. No reconoce la operación de su terminal, pero si usa una aplicación de administrador de archivos, informa los nuevos archivos movidos al índice y ahora se encuentran nuevamente. ¿Estás seguro de que la parte ftp es realmente necesaria? Me pregunto porque el ftp no puede cambiar los archivos que están dentro del tar, entonces, ¿por qué debería ser importante?
@mgutt Supongo que tiene razón acerca de que no se requiere la parte de FTP. ¡Estaba reuniendo información de otras soluciones de sugerencias y esto fue lo que terminó funcionando para mí!

Verifique los datos EXIF ​​y vea si hay una marca de tiempo allí.

Si es así, la Corrección de la fecha de la foto le permitirá sobrescribir la marca de tiempo del archivo fallido con la EXIF, devolviéndole la clasificación adecuada.

Nada. Los datos EXIF ​​​​están ahí, y la aplicación informó que cambió con éxito las marcas de tiempo cuando la usé, pero se mantuvieron igual; Reinicié y eliminé el caché de la galería también, pero eso no ayudó. ¿La aplicación requiere root? Parece como si hubiera algún tipo de protección contra escritura en las marcas de tiempo que nada puede superar.

Esta es una pregunta que realmente me preocupa mucho cuando me encuentro con dispositivos que solo tienen MTP pero no el modo de almacenamiento masivo. También tengo preocupaciones al respecto exactamente por las mismas razones con Mahn.

Después de algunas pruebas, encontré una solución temporal que tal vez pueda preservar la marca de tiempo.

Hace uso del lector de tarjetas sdcard / OTG externo y también el comando cp con -a la marca de tiempo podrá conservarse. Pero el requisito es que el teléfono debe estar rooteado.

  1. Primero copie los datos a la tarjeta SD.
  2. Léalo con ranura para tarjeta de memoria/lector de tarjetas OTG
  3. use adb shell y adquiera permiso de root (su)
  4. cp -a * los datos de la tarjeta a la memoria interna.

Como se mencionó en otra respuesta, en los dispositivos que usan FUSE para la emulación de tarjetas SD (como los dispositivos Nexus modernos), solo la raíz puede cambiar las marcas de tiempo de los archivos en formato /sdcard. Dado que cosas como MTP y ADB no se ejecutan como root, no puede conservar las marcas de tiempo con estos métodos. Sin embargo, si su dispositivo está rooteado, puede arreglar las marcas de tiempo con un paso por separado después.

Mientras restauraba una copia de seguridad completa /sdcarddesde una PC con Linux a mi tableta, usé este comando para corregir todas las marcas de tiempo después de cargar los archivos con 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

Esto debe ejecutarse desde la raíz del directorio en la PC que corresponde al /sdcarddispositivo. (O, si cargó algo que no sea una /sdcardcopia de seguridad completa, cambie la ruta en el touchcomando cerca del final. Pero debe ejecutar esto desde cualquier directorio en la PC que corresponda al directorio en el touchcomando).

La forma en que funciona es que revisa todos los archivos en el lado de la PC, obtiene la marca de tiempo de cada uno y ejecuta un touchcomando como root en el dispositivo para establecer allí la marca de tiempo del archivo correspondiente.

Tenga en cuenta que esto ejecutará un sucomando separado para cada archivo individual. Si tiene habilitado el registro en su programa raíz (por ejemplo, SuperSU), es posible que desee deshabilitarlo para evitar producir un gran número de entradas de registro. Y si tiene su dispositivo configurado para solicitar confirmación en cada susolicitud, probablemente querrá cambiar eso temporalmente. (Es posible que se le ocurra una variación que canalice un flujo de touchcomandos a un solo shell raíz en el dispositivo, pero la forma sencilla de hacerlo no funcionó cuando lo probé, y no quería gastar mucho tiempo en ello.)

Lo he usado con éxito en un Nexus 10 con Android 5.1.

Tengo exactamente el mismo problema. Parece que está bloqueado por un fusible en el Nexus 4 que ejecuta 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

Esa información se tomó a través de una sesión de shell adb; Supongo que ese fusible estará en la mezcla para todas las cuentas de nivel de aplicación.

TL; DR Por lo que parece, no se puede hacer sin rootear el teléfono.

Mi "solución" por el momento es cargar imágenes de teléfonos anteriores una a la vez en orden cronológico, con pausas en el medio, en un directorio diferente. Aquí está el script de shell de Linux que estoy usando: [old_pictures]$ for f in $(ls -1 * | sort -t _ -k 2); do adb push $f /storage/sdcard0/DCIM/Past/; sleep 3; done;si sigue esta ruta, haga una carga de prueba primero para asegurarse de que está satisfecho. Además, deshabilite la Carga instantánea de Google+ mientras lo hace para que no obtenga "cargas dobles".
Gracias, eso ayuda; como su secuencia de comandos for: tanto mtp a través de windows como adb push desconectan la conexión para mí después de los primeros mil archivos más o menos en mi caso, además de que algunos archivos terminan corruptos al azar, ¿está viendo lo mismo? básicamente como se describe este problema aquí: code.google.com/p/android/issues/detail?id=35185 (quizás debería hacer una pregunta por separado, ya que esto no está directamente relacionado con las marcas de tiempo en sí. Sin embargo, tengo que amar mtp)

Si usa la aplicación Google Photo y desea que su archivo aparezca en el orden correcto, hay una solución.

El trasfondo del problema

Este es un error de Android. No permite que usuarios que no sean root cambien la fecha de modificación de los archivos ( https://code.google.com/p/android/issues/detail?id=18624 desde la introducción de multiusuario/sandbox con el sistema de archivos FUSE) . Y no conserva la marca de tiempo al copiar archivos con el protocolo MTP ( https://code.google.com/p/android/issues/detail?id=92635 ).

La solución para los usuarios de Google Photo

Las fotos se ordenan usando la información EXIF ​​si está disponible, por lo que puede usar cualquier forma de configurar los datos EXIF ​​correctos para ellas. Cualquier cámara debe configurar esto automáticamente para usted, solo asegúrese de que la fecha y la hora sean correctas en ellas.

Para videos o si no desea configurar los datos EXIF, simplemente vaya a https://photos.google.com/ y cargue su video / fotos desde allí. Conserva la marca de tiempo de modificación que tiene en su computadora y, dado que está sincronizada con su dispositivo, verá la foto en la aplicación, ordenada correctamente, tan pronto como haya terminado con la carga.

Utilice una herramienta de sincronización como, por ejemplo , FolderSync , que debería ocuparse de las marcas de tiempo en consecuencia. Las herramientas de sincronización deben estar especializadas en el manejo de todos los aspectos del mantenimiento real de copias síncronas, incluidas las marcas de tiempo, por supuesto.

Probé un par de herramientas de sincronización, pero ninguna sincronizó la marca de tiempo, porque supongo que hay algún tipo de protección. Gracias por la respuesta.
¿Has probado la versión de prueba de FTPSyncX ? Tal vez no sea el aspecto más sofisticado (el desarrollador no es un diseñador). Pero ya uso el Pro durante aproximadamente un año, y sincroniza bien las marcas de tiempo a través de SFTP/SSH (el único protocolo que uso; la aplicación puede manejar más).
Lo comprobaré, pero teniendo en cuenta que SSHDroid no funcionó para mí, supongo que tampoco obtendré las marcas de tiempo.
Casi apuesto a que lo hará. Todavía recuerdo lo difícil que fue esa parte para el desarrollador: nos sentamos horas en Skype discutiendo el problema :) Había ese feo problema de tiempo en Windows, que a veces informaba las cosas mal... Oh, obtener OT :) Simplemente inténtalo, no puede doler, ¿verdad? Y cuéntanos cómo te fue...
Nada. FTPSyncX Trial como cliente en el teléfono, freeSSHd como servidor en mi computadora portátil, puedo conectarme y sincronizar archivos a través de STP/SSH, pero la marca de tiempo de las imágenes transferidas al teléfono aún se sobrescribe a la fecha actual.
Dios mio. Entonces debe tener que ver con cambios debido a Android 4.x/MTP. Lo siento, no tengo ningún dispositivo 4.x para verificar, pero aun así valió la pena intentarlo.
Np, agradezco la ayuda. Supongo que tendré que rendirme por ahora, ya he perdido demasiado tiempo en esto.
Sí. Esa es una de las razones por las que nunca compraría un dispositivo sin almacenamiento extraíble (aquí: dispositivo Android sin ranura para tarjeta SD). Si el dispositivo deja de responder, ni siquiera puede llevar sus datos a otro. Para mí un absoluto no-go.
FolderSync conserva la marca de tiempo solo para los archivos cargados y solo si usa FTP o SMB: tacit.dk/foldersync/faq#Q26 Si los descarga en un teléfono nuevo, la marca de tiempo se pierde. Debido a eso, tengo una copia de seguridad completa de todos mis archivos multimedia en mi nas con las marcas de tiempo correctas, pero no puedo moverlos al nuevo teléfono sin perder eso :(
En el peor de los casos, siempre se pueden restaurar las marcas de tiempo de las fotos a partir de sus datos Exif. Las herramientas para eso existen para la mayoría de las plataformas. Pero por supuesto, no sabía que FolderSync los mantiene unidireccionales solo, ya que rara vez sincronizo desde la PC a Android (generalmente al revés). Mis fotos se guardan en la tarjeta SD externa, así que simplemente puedo reemplazarla ;)

CONSERVANDO LA FECHA MODIFICADA EN EL DISPOSITIVO NEXUS --- NO SE NECESITA ROOT ---

  • De Android a PC: Usa MTP
  • De PC a Android: use Droid Explorer

salud.. :)

conserva la fecha de modificación. No sé cómo lo hace Droid Explorer. pero simplemente funciona.

asegúrese de que la depuración de USB esté marcada antes de usar Droid Explorer.

um... hay una limitación sin embargo... Droid Explorer solo puede transferir archivos, no carpetas.

  • con Droid Explorer, copie archivos en un teléfono Android en alguna carpeta específica
  • luego, con el administrador de archivos dentro de Android, mueva esos archivos a la carpeta que queremos, no use la copia porque la copia alterará la fecha de modificación mientras que el corte no lo hace.
Droid Explorer requiere ROOT, ¿no?
@AntonK Sí, Droid Explorer necesita Root para conservar la marca de tiempo. Si Root no está disponible, sobrescribirá la fecha: maxrev.de/…

Use PTP en lugar de MTP cuando conecte su teléfono por USB. Funciona para mí, uso un Samsung Note 4 conectado a una máquina Ubuntu 14.04. Sin embargo, conectarse como PTP solo permite copiar fotos/imágenes. Todos los demás métodos para copiar archivos (bluetooth, WIFI, administrador de archivos) en una unidad externa cambiarán la fecha.

Lo probé con Windows 10 y Note 3 usando CM 12.1 (Android 5.1.1). Moví los archivos (la única forma en que Windows permite la conservación) pero no conservó las marcas de tiempo. :(

Puedes usar adb

  1. Habilite el modo desarrollador en el dispositivo móvil.

  2. Habilite la depuración de USG en dispositivos móviles.

  3. Instale ADB en su computadora portátil.

  4. Conecta tu móvil a tu portátil mediante USB.

  5. Abra la terminal de su computadora portátil e inicie sesión en su dispositivo móvil usando los siguientes comandos

    dispositivos adb shell adb

  6. Encuentre la ruta exacta donde desea colocar sus archivos.

  7. Salga de adb shell usando el comando exit.

  8. Use el siguiente comando para enviar archivos desde su computadora portátil al dispositivo móvil sin que se vean afectados los metadatos (hora de creación/modificación)

    adb push source_path target_mobile_path

Puede enviar carpetas y varios archivos usando el adb pushcomando de una sola vez.

Puede usar el mismo procedimiento y comando adb pull source_mobile_path target_laptop_pathpara copiar archivos de un dispositivo móvil a una computadora portátil sin afectar las fechas.

Mi solución para conservar la fecha de modificación durante la copia de archivos en un dispositivo Android con MTP:

Probado en stock LG G2 (sin root), Andorid 4.4.2 y HTC one M7, Andorid 4.4.2:

  1. Red compartida de la carpeta para copiar en la computadora (Win 8)
  2. Use SyncMe Wireless para copiar archivos de la computadora al dispositivo

Por lo que puedo ver, ¡las fechas de modificación se conservan por completo!

Solución de copia de seguridad que utiliza "SanDisk Memory Zone" para conservar la fecha de la marca de tiempo. copiar/mover archivos desde un dispositivo Android a una tarjeta SDC externa - Probado en Samsung Note 2, Note 3 y Mini SIII

Simplemente haga una copia de seguridad de sus archivos de fotos en la tarjeta SDC y mueva la tarjeta a otro Android, PC, Apple u otro dispositivo; si no se usa para hacer una copia de seguridad de sus archivos de fotos, siga estas sencillas instrucciones de 8 pasos"

  1. Busque en Google Play e instale "SanDisk Memory Zone".
  2. Inicie la aplicación y espere a que finalice el archivo de índice.
  3. Seleccione Copia de seguridad/Restaurar y cambie o marque la configuración.
  4. Seleccione el destino de la tarjeta de memoria y qué respaldar (contactos, sms, fotos, música, etc.).
  5. Verifique la capacidad requerida y disponible, y vaya al botón CONTINUAR.
  6. Espere a que se complete la copia de seguridad.
  7. Ahora tiene una copia de los archivos en su tarjeta SD en ".memoryzone_backup/files/1"
  8. Ahora puede mover los archivos de su tarjeta SD, como fotos, a su Windows, Linux u otro dispositivo Android conservando la marca de tiempo original.
copiar archivos a tarjetas SD externas no causa el problema con la marca de tiempo de modificación

Solución rápida y fácil: simplemente use una PC o Mac para copiar los archivos de la tarjeta SD antigua (o PC) a la nueva tarjeta SD. Use una PC/Mac con un lector/grabador de tarjetas SD (existen convertidores de tarjetas USB a SD) que ven la tarjeta como un almacenamiento USB FAT32. Cuando haya terminado de copiar, vuelva a insertar la nueva tarjeta en su teléfono y reinicie.

Me cambié a un Moto X 2014 y tuve este problema.

También probé muchas cosas, una solución parecía ser "Motorola Migrate" para sincronizar con WiFi dos teléfonos (un viejo giro hacia atrás de pan de jengibre). En la galería, la situación era buena (incluso en los detalles), pero extrañamente en el administrador de archivos se cambió la fecha, y después de unas horas, incluso la galería también mostró la fecha de transferencia.

La solución alternativa, si los archivos no son demasiados, podría ser copiar manualmente uno por uno, cambiando cada vez la fecha y la hora en el teléfono.

Tengo un Nexus 4 y tuve el mismo problema con la marca de tiempo y las fotos (de hecho, todos los archivos).

Aquí están las líneas de comando (con un teléfono rooteado) que usé, gracias a una publicación en Ubuntu:

sudo apt-get install android-tools-adb

(en Ubuntu si Android SDK no está instalado)

adb devices
cd /media/my_backup_folder_where_i_put_a_folder_with_all_my_data_named_"savandroid"_in_it

Para ir a mi carpeta "backup" que contiene la carpeta "savandroid"

adb root
adb push savandroid /sdcard

¡Todos los archivos y carpetas que están en "saveandroid" se envían a la tarjeta SD y funcionan muy bien con todas las marcas de tiempo correctas!

Nota : en Cyanogenmod tuve que seleccionar root para "aplicaciones y adb" en el menú de desarrolladores. De forma predeterminada, solo está configurado en las aplicaciones.

Agregaré mi solución que funcionó en Ubuntu

Primero instale simple-mtpfs e instale el fusible

cd ~
mkdir myphone
simple-mtpfs ~/myphone

Ahora que tiene las carpetas de su teléfono montadas en este directorio, puede usar rsync -t, o cp -ppara copiar las imágenes y los tiempos de creación/modificación/acceso no cambiarán.

Trabaja para mi :)

En el terminal, mientras está montado con simple-mtpfs, las marcas de tiempo aparecen como preservadas. Pero al acceder a los archivos en el teléfono, las marcas de tiempo parecen haberse reiniciado.

Para copiar archivos de su Android a su PC manteniendo las marcas de tiempo:

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

Para restaurarlos de nuevo a Android:

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

Esto funciona mediante la creación de un archivo tar dentro del dispositivo, que se extrae inmediatamente en su servidor y viceversa.

La "v" le permite ver el nombre del archivo que se está copiando.

Por supuesto, esto supone que tiene "adb" instalado, que el teléfono tiene habilitada la depuración USB y que ya validó el certificado de depuración.

sudo apt install adb

Pruebe la aplicación "Bluetooth File Transfer" que conserva la fecha de modificación con el movimiento. Y también creo que con la copia, pero primero intente con un archivo/carpeta para asegurarse. También puede explorar el otro dispositivo a través de bluebooth.

Proporcionar un enlace a las aplicaciones que recomienda haría que esta sea una respuesta más útil.

Utilice SyncMe Wireless y red compartida. Las marcas de tiempo se conservan y la sincronización es rápida. Pude hacer una copia de seguridad sin una computadora a la tarjeta SD en Kingston MobileLite Wireless en 20 minutos, volver a sincronizar al instante.

¿Puedes vincular esta aplicación?
Solo pude encontrar el enlace para SyncMe Wireless , pero no "Compartir red", a menos que realmente quisiera decir que es una sola aplicación. Proporcione también el breve resumen de la aplicación y los pasos para hacerlo si es posible.