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:
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).
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:
- el ID de usuario efectivo de la persona que llama debe coincidir con el propietario del archivo; o
- 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.
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).
En su PC, cree un archivo .tar.gz de todos los archivos que desea transferir.
Transfiera el archivo al dispositivo mediante FTP, asegurándose de utilizar el comando MFMT.
En el dispositivo, extraiga el archivo en un shell como root.
su
comando. Es posible que deba otorgar acceso si aparece SuperSU.cd /sdcard/
tar -xvf ARCHIVE_NAME_HERE.tar.gz
DCIM/Camera
directorio, 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.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.
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.
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.
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 /sdcard
desde 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 /sdcard
dispositivo. (O, si cargó algo que no sea una /sdcard
copia de seguridad completa, cambie la ruta en el touch
comando cerca del final. Pero debe ejecutar esto desde cualquier directorio en la PC que corresponda al directorio en el touch
comando).
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 touch
comando como root en el dispositivo para establecer allí la marca de tiempo del archivo correspondiente.
Tenga en cuenta que esto ejecutará un su
comando 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 su
solicitud, probablemente querrá cambiar eso temporalmente. (Es posible que se le ocurra una variación que canalice un flujo de touch
comandos 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.
[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".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.
CONSERVANDO LA FECHA MODIFICADA EN EL DISPOSITIVO NEXUS --- NO SE NECESITA ROOT ---
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.
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.
Puedes usar adb
Habilite el modo desarrollador en el dispositivo móvil.
Habilite la depuración de USG en dispositivos móviles.
Instale ADB en su computadora portátil.
Conecta tu móvil a tu portátil mediante USB.
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
Encuentre la ruta exacta donde desea colocar sus archivos.
Salga de adb shell usando el comando exit.
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 push
comando de una sola vez.
Puede usar el mismo procedimiento y comando adb pull source_mobile_path target_laptop_path
para 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:
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"
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 -p
para copiar las imágenes y los tiempos de creación/modificación/acceso no cambiarán.
Trabaja para mi :)
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.
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.
Oportunidad
mahn