Come posso trasferire foto sul mio dispositivo Android Jelly Bean preservando il timestamp originale?


25

Di recente ho acquistato un Nexus 4 e vorrei trasferirvi le foto del mio dispositivo precedente. Il mio precedente telefono Android utilizzava l'archiviazione di massa USB standard che aveva dato 0 problemi per copiare avanti e indietro roba, ma il Nexus 4, come molti altri telefoni Android moderni suppongo, utilizza invece MTP, che ha l'interessante funzionalità di rifiutare di copiare l'originale date / timestamp dei file, usando invece la data in cui i file vengono copiati.

Questo è ovviamente un grande peccato quando si tratta di foto; non solo perché non è possibile controllare la data originale in cui è stata scattata la foto durante la navigazione sul telefono, ma anche perché finiscono per essere completamente non ordinati.

C'è un modo per trasferire foto su un telefono Android Jelly Bean che non supporta l'archiviazione di massa USB preservando i timestamp originali?

Cose che ho provato finora:

  • Trasferimento tramite USB MTP
  • Push ADB (sia cartelle complete che singoli file)
  • Trasferimento tramite SSH (utilizzando SSHDroid + WinSCP)
  • Caricamento e download da Dropbox
  • Trasferimento di un file ZIP tramite MTP e decompressione del file sul telefono
  • Trasferimento dall'altro telefono tramite bluetooth
  • Funzione "data fissa" di QuickPic
  • Sincronizzazione locale
  • Correzione della data della foto
  • FTPSyncX
  • Segnali di fumo
  • Urlando al telefono

Nessuno di loro ha conservato il timestamp e questo mi sta facendo impazzire.

(Inoltre, non sono ancora radicato, ma se l'unica via praticabile richiede il root accetterei anch'io questa risposta.)


Android supporta i file .tar non caricati? Se è così, forse potresti copiare un file .tar delle immagini. Non so se la decompressione cambierebbe o meno il timestamp dei singoli file.
Probabilità

@Chance ci ha provato prima ma non ha aiutato neanche; il problema è che nulla ha i privilegi di scrivere il timestamp per impostazione predefinita, quindi non c'è nulla che si possa fare se non il rooting in questo momento.
Mahn,

Inoltre, a tutti coloro che hanno risposto a questa domanda: grazie. Il modo in cui funzionano i siti SE posso accettare solo una risposta, ma ogni risposta qui ha aiutato in qualche modo.
Mahn,

Risposte:


10

Non è possibile, questo è un problema di autorizzazione corrente ( segnalazione bug qui ) della cartella s / sdcard di Android 4.0+ se non utilizza FAT32 (ma FUSE).

Motivo: c'è una transizione da FAT32 allo spazio di archiviazione utente unificato per app e dati multimediali (usando ext4) su un singolo file system.

Ci siamo stancati di vedere che gli OEM includono molti GB di memoria interna per la musica, mentre gli utenti stavano ancora esaurendo lo spazio per app e dati. Questo approccio ci consente di unire tutto su un volume, il che è molto meglio.

- Dan Morrill, ingegnere Android di Google

Le vecchie proprietà FAT32 sono emulate usando un livello FUSE per essere compatibili con le app esistenti. Inoltre: / data / e / sdcard sui dispositivi Google che iniziano con Nexus 7 utilizzano solo una singola partizione (/ data / media rappresenta il contenuto "sdcard" ed è esposto utilizzando il livello FUSE alle app).

Ecco l' implementazione di CyanogenMod del driver FUSE se sei interessato a vedere la fonte. Sembra che sia stata implementata l'impostazione degli attributi di data e ora.

EDIT: funziona solo con root.

Motivo esatto: tutti i file sono di proprietà di root.sdcard_rw (vedi qui ).

Un chiamante senza uid = 0 non può chiamare il syscall utimensat () , non riesce già nel livello VFS (EPERM) per timestamp diversi da quelli correnti:

  1. l'ID utente effettivo del chiamante deve corrispondere al proprietario del file; o
  2. il chiamante deve disporre dei privilegi appropriati.

Per apportare modifiche diverse dall'impostazione di entrambi i timestamp
sull'ora corrente (ovvero, times non è NULL ed entrambi i campi
tv_nsec non sono UTIME_NOW ed entrambi i campi tv_nsec non sono UTIME_OMIT),
devono essere applicate le condizioni 2 o 3 precedenti.


Grazie per le informazioni, speriamo che questo sia qualcosa che Google può e sarebbe disposto a risolvere, perché per quanto ne so il problema non è il livello dei fusibili o il protocollo mtp, ma i rigidi privilegi che sono stati impostati lì, che dal sembra essere piuttosto recente (4.2.1?) dal momento che l'app Photo Date Correction pubblicata di seguito sembra funzionare con dispositivi 4.0, basati su miccia / mtp più vecchi come il galaxy nexus.
Mahn,

2
Aggiornamento per i futuri lettori: questo non è stato risolto nel 4.2.2.
Mahn,

2
Aggiornamento per ancora più lettori futuri: non risolto in 6.0 marshmallow.
Mahn,

6

Di recente ho riscontrato questo problema su un Nexus 5 e ho provato la maggior parte delle soluzioni elencate qui senza fortuna. Nel mio caso, sembra essere causato da un bug riconosciuto con Android ( sorgente ) stock .

La mia soluzione era la seguente: ho usato Windows 8.1, ma nessun motivo non funzionava su OSX / Linux (il root è comunque richiesto sul dispositivo).

  1. Sul tuo PC, crea un archivio .tar.gz di tutti i file che desideri trasferire.

    • Ho usato 7zip per questo - vale la pena menzionare su Windows, dovrai prima creare l'archivio .tar, quindi applicare la compressione .gz.
  2. Trasferire l'archivio sul dispositivo tramite FTP, assicurandosi che venga utilizzato il comando MFMT.

    • Il server FTP supporta MFMT sul lato dispositivo. Basta installare e abilitare, non è necessaria alcuna configurazione aggiuntiva.
    • Sul PC, ho usato Filezilla - è necessario assicurarsi che sia selezionato Trasferisci> Conserva timestamp dei file trasferiti .
  3. Sul dispositivo, estrarre l'archivio in una shell come root.

    • Utilizzando Terminal Emulator , assicurati innanzitutto di avere l'accesso come root utilizzando il sucomando. Potrebbe essere necessario concedere l'accesso se si apre SuperSU.
    • Passare alla directory che ora contiene l'archivio .tar.gz con il comando cd, ad esempio: cd /sdcard/
    • Estrarre l'archivio utilizzando quanto segue: tar -xvf ARCHIVE_NAME_HERE.tar.gz
    • Nota: per qualche motivo, quando estraevo direttamente nella DCIM/Cameradirectory, le immagini non venivano visualizzate nell'app della galleria di stock. In questo caso, ti suggerisco di estrarre in una directory diversa e quindi spostare (non copiare) i file nella directory della fotocamera. Sospetto che ciò sia causato da un problema di autorizzazioni. È possibile utilizzare il terminale o il file manager desiderato per spostare i file.
  4. Riavvia per buona misura.

Ciò ha permesso di mantenere intatti tutti gli attributi 'data modifica' dei file e ha lasciato tutte le foto nell'ordine corretto quando visualizzate nell'app della galleria.


Non vengono visualizzati nella galleria a causa dell'indice multimediale. Non riconosce il funzionamento del terminale ma se si utilizza un'app di gestione file, segnala i nuovi file spostati all'indice e ora vengono trovati di nuovo. Sei sicuro che la parte ftp sia davvero necessaria? Mi chiedo perché l'ftp non può cambiare i file che si trovano all'interno del tar, quindi perché dovrebbe essere importante?
mgutt,

@mgutt Immagino che tu abbia ragione sulla parte FTP non richiesta. Stavo raccogliendo pezzi di informazioni da altre soluzioni di suggerimento e questo è ciò che alla fine ha funzionato per me!
rmorrin,

4

Controlla i dati EXIF ​​e vedi se c'è un timestamp lì.

In tal caso, Photo Date Correction ti consentirà di sovrascrivere il timestamp del file pasticciato con quello EXIF, restituendoti il ​​corretto ordinamento.


Niente. I dati EXIF ​​sono lì e l'app ha riferito di aver modificato con successo i timestamp quando l'ho usato, ma sono rimasti gli stessi; Ho riavviato ed eliminato anche la cache della galleria, ma questo non ha aiutato. L'app richiede il root? Sembra che ci fosse una sorta di protezione dalla scrittura nei timestamp che nulla è in grado di superare.
Mahn,

4

Questa è una domanda che mi dà molto fastidio quando mi imbatto in dispositivi che hanno solo MTP ma non la modalità di archiviazione di massa. Ne ho anche delle preoccupazioni esattamente con le stesse ragioni per Mahn.

Dopo alcuni test, ho trovato una soluzione temporanea che forse è in grado di preservare il timestamp.

Utilizza il lettore di schede SD / OTG esterno e anche il comando cp con -a il timestamp sarà in grado di preservare. Ma il requisito è che il telefono deve essere rootato.

  1. Prima copia i dati su SDcard.
  2. Leggilo con lo slot per memory card / il lettore di schede OTG
  3. usa la shell adb e acquisisci i permessi di root (su)
  4. cp -a * i dati dalla scheda alla memoria interna.

4

Come menzionato in un'altra risposta, sui dispositivi che utilizzano FUSE per l'emulazione della scheda SD (come i moderni dispositivi Nexus), solo root può modificare i timestamp dei file /sdcard. Dato che cose come MTP e ADB non funzionano come root, non puoi conservare i timestamp con questi metodi. Tuttavia, se il dispositivo è rootato, è possibile correggere i timestamp con un passaggio separato in seguito.

Durante il ripristino di un backup completo /sdcardda un PC Linux sul mio tablet, ho usato questo comando per correggere tutti i timestamp dopo aver caricato i file 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

Questo dovrebbe essere eseguito dalla radice della directory sul PC che corrisponde /sdcardsul dispositivo. (Oppure, se hai caricato qualcosa di diverso da un /sdcardbackup completo , modifica il percorso nel touchcomando vicino alla fine. Ma dovresti eseguirlo da qualunque directory sul PC corrisponda alla directory nel touchcomando.)

Il modo in cui funziona è che attraversa tutti i file sul lato PC, ottiene il timestamp di ciascuno ed esegue un touchcomando come root sul dispositivo per impostare lì il timestamp del file corrispondente.

Si noti che questo eseguirà un sucomando separato per ogni singolo file. Se la registrazione è abilitata nel programma di root (ad esempio SuperSU), è possibile disabilitarla per evitare di produrre un numero elevato di voci di registro. E se il tuo dispositivo è configurato per richiedere la conferma di ogni surichiesta, probabilmente vorrai modificarlo temporaneamente. (Potrebbe essere possibile trovare una variazione che instrada un flusso di touchcomandi in una singola shell di root sul dispositivo, ma il modo semplice di farlo non ha funzionato quando l'ho provato e non volevo spendere molto tempo su di esso.)

L'ho usato con successo su un Nexus 10 con Android 5.1.


2

Ho lo stesso identico problema. Sembra che sia stato bloccato da un fusibile sul Nexus 4 con 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

Tali informazioni sono state prese tramite una sessione shell adb; Presumo che il fusibile sarà nel mix per tutti gli account a livello di app.

TL; DR A quanto pare, non può essere fatto senza il rooting del telefono.


1
La mia "soluzione" per ora è quella di caricare le immagini dai telefoni precedenti una alla volta in ordine cronologico, con pause intermedie, in una directory diversa. Ecco lo script della shell Linux che sto usando: [old_pictures]$ for f in $(ls -1 * | sort -t _ -k 2); do adb push $f /storage/sdcard0/DCIM/Past/; sleep 3; done; se segui questa strada, esegui prima un caricamento di prova per essere sicuro di essere soddisfatto. Inoltre, disabilita il Caricamento istantaneo di Google+ mentre ci sei, in modo da non ottenere "doppi caricamenti".
Turtle,

Grazie, questo aiuta; come per lo script: sia mtp tramite windows sia push adb lasciano cadere la connessione per me dopo i primi mille file nel mio caso, più alcuni file finiscono casualmente corrotti, vedi lo stesso? sostanzialmente come questo problema descrive qui: code.google.com/p/android/issues/detail?id=35185 (forse dovrei fare una domanda separata, dal momento che questo non è direttamente correlato ai timestamp stessi. Devo amare mtp però)
Mahn il

2

Se usi l'app Google Photo e desideri che il tuo file sia elencato nell'ordine giusto, c'è una soluzione.

Lo sfondo del problema

Questo è un bug Android. Non consente all'utente non root di modificare la data di modifica dei file ( https://code.google.com/p/android/issues/detail?id=18624 dall'introduzione del multiutente / sandbox con filesystem FUSE) . E non mantiene il timestamp durante la copia di file con protocollo MTP ( https://code.google.com/p/android/issues/detail?id=92635 ).

La soluzione alternativa per gli utenti di Google Photo

Le foto vengono ordinate utilizzando le informazioni EXIF, se disponibili, in modo da poter utilizzare qualsiasi tipo di impostazione dei dati EXIF ​​giusti per loro. Qualsiasi fotocamera dovrebbe impostarlo automaticamente per te, assicurati solo che la data / ora sia corretta in essi.

Per i video o se non desideri impostare i dati EXIF, vai su https://photos.google.com/ e carica i tuoi video / foto da lì. Conserva il timestamp di modifica che hai sul tuo computer e poiché è sincronizzato con il tuo dispositivo vedrai la foto nell'app, ordinata correttamente, non appena hai finito con il caricamento.


1

Utilizzare uno strumento di sincronizzazione come ad esempio FolderSync , che dovrebbe occuparsi dei timestamp di conseguenza. Gli strumenti di sincronizzazione dovrebbero essere specializzati nella gestione di tutti gli aspetti del mantenimento veramente delle copie sincrone, compresi i timestamp, ovviamente.


Ho provato un paio di strumenti di sincronizzazione, ma nessuno ha sincronizzato il timestamp, perché immagino che ci sia una sorta di protezione. Grazie per la risposta però.
Mahn,

Hai provato FTPSyncX Trial ? Forse non l'aspetto più sofisticato (lo sviluppatore non è un designer). Ma uso Pro già da circa un anno e sincronizza bene i timestamp tramite SFTP / SSH (l'unico protocollo che uso - l'app può gestirne di più).
Izzy

Lo controllerò, ma considerando che SSHDroid non ha funzionato per me, immagino che non avrò nemmeno i timestamp con esso.
Mahn,

Scommetto che lo farà. Ricordo ancora quanto quella parte fosse difficile per lo sviluppatore - ci siamo seduti ore su Skype a discutere il problema :) C'era quel brutto problema di tempo su Windows, che a volte riportava cose in modo errato ... Oh, ottenendo OT :) Basta provarlo, non può far male, vero? E facci sapere come ha funzionato ...
Izzy

Niente. FTPSyncX Trial come client sul telefono, freeSSHd come server sul mio laptop, sono in grado di connettere e sincronizzare i file tramite STP / SSH, ma il timestamp delle immagini trasferite sul telefono viene ancora sovrascritto alla data corrente.
Mahn,

1

DATA DI CONSERVAZIONE MODIFICATA SUL DISPOSITIVO NEXUS --- NON È NECESSARIO ROOT ---

  • Da Android a PC: utilizzare MTP
  • Da PC ad Android: utilizzare Droid Explorer

Saluti.. :)

conserva la data di modifica. Non so come fa Droid Explorer. ma funziona e basta.

assicurarsi che il debug USB sia verificato prima di utilizzare Droid Explorer.

um .. c'è un limite però ... Droid Explorer può solo trasferire file, non cartelle.

  • con Droid Explorer, copia i file nel telefono Android in una cartella specifica
  • quindi con il file manager all'interno di Android, sposta quei file nella cartella che vogliamo, non usare la copia perché la copia cambierà la data modificata mentre taglia non lo fa.

Droid Explorer richiede ROOT, vero?
AntonK,

@AntonK Sì Droid Explorer ha bisogno di Root per conservare il timestamp. Se Root non è disponibile, sovrascriverà la data: maxrev.de/…
mgutt

1

Utilizzare PTP anziché MTP quando si collega il telefono tramite USB. Funziona per me, uso un Samsung Note 4 collegato alla macchina Ubuntu 14.04. Tuttavia, il collegamento come PTP consente solo la copia di immagini / immagini. Tutti gli altri metodi di copia dei file (bluetooth, WIFI, file manager) in un'unità esterna cambieranno la data.


L'ho provato con Windows 10 e una Nota 3 usando CM 12.1 (Android 5.1.1). Ho spostato i file (l'unico modo in cui Windows consente la conservazione) ma non ha conservato i timestamp. :(
mgutt

0

La mia soluzione per conservare la data di modifica durante la copia del file sul dispositivo Android con MTP:

Testato su stock LG G2 (senza root), Andorid 4.4.2 e HTC one M7, Andorid 4.4.2:

  1. Condivisione di rete della cartella da copiare sul computer (Win 8)
  2. Utilizzare SyncMe Wireless per copiare i file dal computer al dispositivo

Per quanto posso vedere, le date di modifica sono completamente conservate!


0

Soluzione di backup che utilizza "SanDisk Memory Zone" per conservare la data del timestamp. copia / spostamento di file dal dispositivo Android su SDCard esterna - Testato su Samsung Note 2, Note 3 e Mini SIII

Basta eseguire il backup dei file di foto su SDCard e spostare la scheda su altri dispositivi Android, PC, Apple o altri dispositivi. Se non utilizzati per il backup dei file di foto, seguire queste semplici istruzioni da 8 punti "

  1. Cerca su Google Play e installa "SanDisk Memory Zone".
  2. Avvia l'app e attendi il completamento del file indice.
  3. Selezionare Backup / Ripristina e modificare o contrassegnare le impostazioni.
  4. Selezionare la destinazione della scheda di memoria e cosa eseguire il backup (contatti, sms, foto, musica, ecc.).
  5. Verifica la capacità richiesta e disponibile e continua con il pulsante CONTINUA.
  6. Attendere il completamento del backup.
  7. Ora hai una copia dei file nella tua SDCard su ".memoryzone_backup / files / 1"
  8. Ora puoi spostare i file della scheda SD come foto su Windows, Linux o altri dispositivi Android preservando il Timestamp originale.

la copia di file su schede SD esterne non causa il problema con il timestamp di modifica
AntonK,

0

Soluzione semplice e veloce: basta usare un PC o un Mac per copiare i file dalla vecchia scheda SD (o PC) alla nuova scheda SD. Utilizzare un PC / Mac con un lettore / scrittore di schede SD (esistono convertitori da scheda USB a scheda SD) che vede la scheda come memoria USB FAT32. Al termine della copia, reinserire la nuova scheda nel telefono e riavviare.


0

Mi sono trasferito su una Moto X 2014 e ho avuto questo problema.

Ho provato anche molte cose, una soluzione sembrava essere "Motorola Migrate" per la sincronizzazione con due telefoni WiFi (un vecchio backflip di pan di zenzero). Nella galleria, la situazione era buona (anche nei dettagli), ma stranamente nel file manager la data è stata cambiata e dopo poche ore anche la galleria ha mostrato anche la data del trasferimento.

La soluzione alternativa, se i file non sono troppi, potrebbe essere copiata manualmente uno per uno, modificando ogni volta la data e l'ora sul telefono.


0

Ho un Nexus 4 e ho avuto lo stesso problema con timestamp e foto (in effetti tutti i file).

Ecco le righe di comando (con un telefono rootato) che ho usato, grazie a un post su Ubuntu:

sudo apt-get install android-tools-adb

(su Ubuntu se Android SDK non è installato)

adb devices
cd /media/my_backup_folder_where_i_put_a_folder_with_all_my_data_named_"savandroid"_in_it

Per andare nella mia cartella "backup" che contiene la cartella "savandroid"

adb root
adb push savandroid /sdcard

Tutti i file e le cartelle che si trovano in "saveandroid" vengono inviati alla scheda SD funzionante correttamente con tutti i timestamp corretti!

Nota : su Cyanogenmod ho dovuto selezionare root per "app e adb" nel menu degli sviluppatori. Per impostazione predefinita, è impostato solo sulle app.


0

Aggiungerò la mia soluzione che ha funzionato su Ubuntu

Innanzitutto installa simple-mtpfs e installa fuse

cd ~
mkdir myphone
simple-mtpfs ~/myphone

Ora hai le cartelle del telefono montate su questa directory, puoi usarle rsync -t o cp -pper copiare le immagini e i tempi creati / modificati / accessibili non saranno cambiati.

Lavora per me :)


Nel terminale, mentre montato con simple-mtpfs, i timestamp appaiono come conservati. Ma quando si accede ai file nel telefono, i timestamp sembrano essere ripristinati.
Teresa e Junior,

0

Per copiare i file dal tuo Android al PC mantenendo i timestamp:

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

Per ripristinarli su Android:

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

Funziona creando un file tar all'interno del dispositivo, che viene immediatamente estratto sul tuo host e viceversa.

La "v" ti consente di vedere il nome del file da copiare.

Naturalmente questo presuppone che tu abbia "adb" installato, che il telefono abbia il debug USB abilitato e che tu abbia già convalidato il certificato di debug.

sudo apt install adb

-1

Prova l'app "Bluetooth File Transfer" preserva la data modificata con lo spostamento. E credo anche con la copia, ma prima prova con un file / cartella per essere sicuro. Può anche esplorare l'altro dispositivo tramite bluebooth.


Fornire un collegamento alle app che consigli renderebbe questa una risposta più utile.
eldarerathis,

-1

Uso SyncMe Wireless e condivisione di rete. I timestamp vengono conservati e la sincronizzazione è rapida. Sono stato in grado di eseguire il backup senza un computer su scheda SD in Kingston MobileLite Wireless in 20 minuti, risincronizzazione istantanea.


Puoi collegare questa app?
Matteo Leggi il

Potrei trovare solo il collegamento per SyncMe Wireless , ma non " Condivisione di rete", a meno che tu non abbia effettivamente inteso che si tratta di un'unica app. Fornisci anche il breve riepilogo dell'app e i passaggi per farlo, se possibile.
Andrew T.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.