Как я могу перенести фотографии на устройство Android Jelly Bean, сохранив исходную метку времени?


25

Я недавно купил Nexus 4, и я хотел бы перенести мои фотографии моего предыдущего устройства на него. Мой предыдущий телефон Android использовал стандартное запоминающее устройство USB, которое давало 0 проблем при копировании туда и обратно, но Nexus 4, как и многие другие современные телефоны Android, я полагаю, использует вместо этого MTP, что имеет интересную особенность - отказываться копировать оригинал даты / метки времени файлов, используя вместо этого дату, когда файлы копируются.

Это очевидно огромный облом, когда дело доходит до фотографий; не только потому, что нельзя проверить исходную дату, когда была сделана фотография во время просмотра по телефону, но также и потому, что они оказались полностью несортированными.

Есть ли способ передачи фотографий на телефон Android Jelly Bean, который не поддерживает запоминающее устройство USB, сохраняя оригинальные метки времени?

Вещи, которые я пробовал до сих пор:

  • Передача через USB MTP
  • ADB push (как полные папки, так и отдельные файлы)
  • Передача по SSH (с использованием SSHDroid + WinSCP)
  • Загрузка и загрузка из Dropbox
  • Передача файла ZIP через MTP и распаковка файла на телефоне
  • Передача с другого телефона через блютус
  • QuickPic функция «исправить дату»
  • Локальная синхронизация
  • Исправление даты фото
  • FTPSyncX
  • Дымовые сигналы
  • Кричать на телефон

Никто из них не сохранил отметку времени, и это сводит меня с ума.

(Кроме того, я еще не root, но если единственный жизнеспособный путь требует root, я также приветствую этот ответ.)


Поддерживает ли Android распаковку файлов .tar? Если это так, возможно, вы могли бы скопировать файл .tar фотографий. Я не знаю, поменяет ли разметка метку времени отдельных файлов или нет.
Шанс

@Chance пробовал это раньше, но тоже не помогло; проблема заключается в том, что по умолчанию ничто не имеет прав на запись метки времени, поэтому ничего не поделаешь, кроме как укореняться прямо сейчас.
Ман

Кроме того, всем, кто участвовал в этом вопросе: Спасибо. Как работают сайты SE, я могу принять только один ответ, но каждый ответ здесь помогал тем или иным способом.
Ман

Ответы:


10

Вы не можете, это текущая проблема с правами доступа (сообщение об ошибке здесь ) в папке Android 4.0 + / sdcard, если она не использует FAT32 (но FUSE).

Причина: существует переход от FAT32 к унифицированному пользовательскому хранилищу для приложений и мультимедийных данных (с использованием ext4) в одной файловой системе.

Мы устали от того, что OEM-производители включают много ГБ встроенного хранилища для музыки, в то время как пользователям все еще не хватает места для приложений и данных. Такой подход позволяет объединить все на одном томе, что намного лучше.

- Дэн Моррилл, инженер Android в Google

Старые свойства FAT32 эмулируются с использованием слоя FUSE для совместимости с существующими приложениями. Также: / data / и / sdcard на устройствах Google, начиная с Nexus 7, используют только один раздел (/ data / media представляет контент «sdcard» и предоставляется приложениям с помощью слоя FUSE).

Вот реализация CyanogenMod драйвера FUSE, если вы заинтересованы в просмотре исходного кода. Похоже, установка атрибутов меток времени реализована.

РЕДАКТИРОВАТЬ: Это работает только с рутом.

Точная причина: все файлы принадлежат root.sdcard_rw (см. Здесь ).

Вызывающий без uh = 0 не может вызвать системный вызов utimensat () , он уже терпит неудачу в слое VFS (EPERM) для временных отметок , отличных от текущего:

  1. эффективный идентификатор пользователя вызывающей стороны должен соответствовать владельцу файла; или
  2. вызывающий должен иметь соответствующие привилегии.

Для внесения каких-либо изменений, кроме установки обеих временных меток на текущее
время (т. Е. Времена не
равны NULL, и оба поля tv_nsec не являются UTIME_NOW, а оба поля tv_nsec не являются UTIME_OMIT),
должны применяться любое условие 2 или 3 выше.


Спасибо за информацию, будем надеяться, что это то, что Google может и хотел бы решить, потому что, насколько я могу судить, проблема не в слое предохранителей или протоколе mtp, а в строгих привилегиях, которые были установлены там, которые Это выглядит довольно недавно (4.2.1?), так как приложение Photo Date Correction, опубликованное ниже, действительно работает со старыми устройствами на основе предохранителей / mtp 4.0, такими как Galaxy Nexus.
Ман

2
Обновление для будущих читателей: это не исправлено в 4.2.2.
Ман

2
Обновление для еще большего числа будущих читателей: нефиксированный в 6.0 зефир.
Ман

6

Я недавно сталкивался с этой проблемой на Nexus 5 и безуспешно пробовал большинство решений, перечисленных здесь. В моем случае, похоже, это вызвано признанной ошибкой со стоковым Android ( источник ).

Мое решение было следующим: я использовал Windows 8.1, но без причины это не сработало бы в OSX / Linux (однако на устройстве требуется root).

  1. На вашем ПК создайте архив .tar.gz всех файлов, которые вы хотите перенести.

    • Для этого я использовал 7zip. Стоит отметить, что в Windows вам нужно сначала создать архив .tar, а затем применить сжатие .gz.
  2. Передайте архив на устройство с помощью FTP, убедившись, что используется команда MFMT.

    • FTP-сервер поддерживает MFMT на стороне устройства. Просто установите и включите, дополнительная настройка не требуется.
    • На ПК я использовал Filezilla - необходимо убедиться, что флажок « Передача»> «Сохранить временные метки переданных файлов» проверен.
  3. На устройстве распакуйте архив в оболочку от имени root.

    • Используя эмулятор терминала , сначала убедитесь, что у вас есть root-доступ с помощью suкоманды. Вам может потребоваться предоставить доступ, если всплывает SuperSU.
    • Перейдите к каталогу, в котором сейчас находится архив .tar.gz, с помощью команды cd, например: cd /sdcard/
    • Распакуйте архив, используя следующее: tar -xvf ARCHIVE_NAME_HERE.tar.gz
    • Примечание. По какой-то причине при извлечении непосредственно в DCIM/Cameraкаталог изображения не отображаются вообще в приложении стоковой галереи. Если это произойдет с вами, я предлагаю вам извлечь в другой каталог, а затем переместить (не копировать) файлы в каталог камеры. Я подозреваю, что это вызвано проблемой с разрешениями. Вы можете использовать терминал или ваш файловый менеджер для перемещения файлов.
  4. Перезагрузитесь для хорошей меры.

Это позволило всем атрибутам «дата изменения» файлов остаться неизменными и оставить все фотографии в правильном порядке при просмотре в приложении галереи.


Они не появляются в галерее из-за индекса СМИ. Он не распознает работу вашего терминала, но если вы используете приложение файлового менеджера, оно сообщает о новых перемещенных файлах в индекс, и теперь они снова обнаруживаются. Вы уверены, что часть ftp действительно нужна? Мне интересно, потому что ftp не может изменить файлы, которые находятся внутри tar, так почему это должно быть важно?
mgutt

@mgutt Полагаю, вы правы в том, что часть FTP не требуется. Я собирал воедино кусочки информации от других решений по предложению, и это было то, что в итоге помогло мне!
rmorrin

4

Проверьте данные EXIF ​​и посмотрите, есть ли там отметка времени.

Если есть, Photo Date Correction позволит вам переписать временную метку испорченного файла на EXIF, вернув вам правильную сортировку.


Ничего такого. Данные EXIF ​​есть, и приложение сообщило об успешном изменении временных меток, когда я их использовал, но они остались прежними; Я перезагрузил компьютер и удалил кеш галереи, но это не помогло. Требуется ли для приложения рут? Кажется, что на временных метках была какая-то защита от записи, которую ничто не может преодолеть.
Mahn

4

Это вопрос, который меня очень беспокоит, когда я сталкиваюсь с устройствами, у которых есть только MTP, но нет режима Mass storage. У меня также есть опасения по этому поводу с точно такими же причинами, что и у Мана.

После некоторого тестирования я нашел временное решение, которое может сохранить временную метку.

Он использует внешний кард-ридер sdcard / OTG, а также команду cp с -a, которую сможет сохранить метка времени. Но требование - телефон должен быть рутирован.

  1. Сначала скопируйте данные на SD-карту.
  2. Прочитайте это с гнездом для карты памяти / кард-ридер OTG
  3. используйте оболочку adb и получите права root (su)
  4. cp -a * данные с карты во внутреннюю память.

4

Как упоминалось в другом ответе, на устройствах, использующих FUSE для эмуляции SD-карты (таких как современные устройства Nexus), только root может изменять временные метки файлов в /sdcard. Поскольку такие вещи, как MTP и ADB, не запускаются с правами root, вы не можете сохранить временные метки с помощью этих методов. Однако, если ваше устройство рутировано, вы можете исправить временные метки с помощью отдельного шага после этого.

Восстанавливая полную резервную копию /sdcardс ПК с Linux на мой планшет, я использовал эту команду, чтобы исправить все временные метки после загрузки файлов с помощью 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

Это должно быть запущено из корня каталога на ПК, который соответствует /sdcardна устройстве. (Или, если вы загрузили что-то, кроме полной /sdcardрезервной копии, измените путь в touchкоманде ближе к концу. Но вы должны запускать его из любого каталога на ПК, который соответствует каталогу в touchкоманде.)

Как это работает, так это то, что он просматривает все файлы на стороне ПК, получает временную метку каждого и запускает на устройстве touchкоманду с правами root, чтобы установить там временную метку соответствующего файла.

Обратите внимание, что это будет запускать отдельную suкоманду для каждого отдельного файла. Если вы включили ведение журнала в своей корневой программе (например, SuperSU), вы можете отключить это, чтобы избежать создания большого количества записей журнала. И если у вас настроено устройство для запроса подтверждения при каждом suзапросе, вы, вероятно, захотите временно его изменить. (Может быть возможно придумать вариант, который направляет поток touchкоманд в одну корневую оболочку на устройстве, но простой способ сделать это не сработал, когда я попробовал, и я не хотел тратить много времени на это.)

Я успешно использовал это на Nexus 10 под управлением Android 5.1.


2

У меня точно такая же проблема. Похоже, что он заблокирован предохранителем на Nexus 4 под управлением 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

Эта информация была взята через сеанс оболочки adb; Я предполагаю, что предохранитель будет в смеси для всех учетных записей уровня приложения.

TL; DR Судя по всему, это невозможно сделать без рутирования телефона.


1
Мое "решение" на данный момент состоит в том, чтобы загружать картинки с прошлых телефонов по одному в хронологическом порядке с паузами между ними в другом каталоге. Вот сценарий оболочки Linux, который я использую: [old_pictures]$ for f in $(ls -1 * | sort -t _ -k 2); do adb push $f /storage/sdcard0/DCIM/Past/; sleep 3; done; если вы идете по этому пути, сначала выполните тестовую загрузку, чтобы убедиться, что вы удовлетворены. Кроме того, отключите функцию мгновенной загрузки Google+, чтобы не получать «двойную загрузку».
Черепаха

Спасибо, это помогает; как для сценария for: и mtp через windows, и adb push сбрасывают соединение для меня после первой тысячи файлов или около того в моем случае, плюс некоторые файлы случайно оказываются поврежденными, вы видите то же самое? в основном, как эта проблема описана здесь: code.google.com/p/android/issues/detail?id=35185 (возможно, мне следует задать отдельный вопрос, поскольку это не имеет прямого отношения к самим временным меткам. Должен любить mtp, хотя)
Mahn

2

Если вы используете приложение Google Photo и хотите, чтобы ваш файл отображался в правильном порядке, есть решение.

Предыстория вопроса

Это ошибка Android. Он не позволяет пользователю без полномочий root изменять дату изменения файлов ( https://code.google.com/p/android/issues/detail?id=18624 с момента появления многопользовательской / песочницы с файловой системой FUSE) , И не сохраняет отметку времени при копировании файлов по протоколу MTP ( https://code.google.com/p/android/issues/detail?id=92635 ).

Обходной путь для пользователей Google Photo

Фотографии упорядочиваются с использованием информации EXIF, если таковая имеется, так что вы можете просто использовать любые способы установки правильных данных EXIF ​​для них. Любая камера должна установить это автоматически для вас, просто убедитесь, что дата / время в них правильные.

Для просмотра видео или если вы не хотите устанавливать данные EXIF, просто перейдите на страницу https://photos.google.com/ и загрузите оттуда свои видео / фотографии. Он сохраняет временную метку изменения, установленную на вашем компьютере, и, поскольку она синхронизируется с вашим устройством, вы увидите фотографию в приложении, правильно отсортированную, как только вы закончите загрузку.


1

Используйте инструмент синхронизации, например, FolderSync , который должен позаботиться о временных отметках соответственно. Инструменты синхронизации должны быть специализированы для обработки всех аспектов реального поддержания синхронных копий, включая, конечно, отметки времени.


Я попробовал пару инструментов синхронизации, но ни одна из них не синхронизировала временную метку, потому что я думаю, что есть какая-то защита. Спасибо за ответ, хотя.
Mahn

Вы пробовали FTPSyncX Trial ? Возможно, не самый сложный вид (разработчик не дизайнер). Но я использую Pro уже около года, и он отлично синхронизирует метки времени через SFTP / SSH (единственный протокол, который я использую - приложение может обрабатывать больше).
Иззи

Я проверю это, но, учитывая, что SSHDroid у меня не работает, я думаю, я не получу и метки времени.
Mahn

Я почти уверен, что так и будет. Я до сих пор помню, насколько трудной была эта часть для разработчика - мы часами сидели в скайпе, обсуждая эту проблему :) Была такая ужасная проблема времени в Windows, которая иногда сообщала о вещах неправильно ... О, получая ОТ :) Просто попробуйте, не может повредить, верно? И дайте нам знать, как это получилось ...
Иззи

Ничего такого. FTPSyncX Trial в качестве клиента на телефоне, freeSSHd в качестве сервера на моем ноутбуке, я могу подключаться и синхронизировать файлы через STP / SSH, но временная метка изображений, переданных на телефон, все еще перезаписывается на текущую дату.
Ман,

1

СОХРАНЯЮЩАЯСЯ ДАТА, ИЗМЕНЕННАЯ НА УСТРОЙСТВЕ NEXUS

  • С Android на ПК: используйте MTP
  • С ПК на Android: используйте Droid Explorer

ура .. :)

это сохранить дату изменения. Я не знаю, как это делает Droid Explorer. но это просто работает.

убедитесь, что USB Debuging проверен перед использованием Droid Explorer.

хм ... хотя есть одно ограничение ... Droid Explorer может передавать только файлы, но не папки.

  • с помощью Droid Explorer скопируйте файлы в телефон Android на какую-то определенную папку
  • затем с помощью файлового менеджера в Android переместите эти файлы в нужную папку, не используйте копирование, потому что копирование будет изменять дату, измененную, а вырезать - нет.

Droid Explorer требует ROOT, не так ли?
AntonK

@AntonK Да Droid Explorer нужен Root для сохранения метки времени. Если Root недоступен, он перезапишет дату: maxrev.de/…
mgutt

1

Используйте PTP вместо MTP при подключении телефона через USB. Это работает для меня, я использую Samsung Note 4, подключенный к машине Ubuntu 14.04. Однако подключение как PTP позволяет копировать только изображения / изображения. Все остальные способы копирования файлов (Bluetooth, WIFI, файловый менеджер) на внешний диск изменят дату.


Я проверял это с Windows 10 и Note 3, используя CM 12.1 (Android 5.1.1). Я переместил файлы (единственный способ, которым окна позволяют сохранять), но он не сохранил метки времени. :(
mgutt

0

Мое решение сохранить дату изменения при копировании файла на устройство Android с MTP:

Протестировано на стоковой LG G2 (без рута), Andorid 4.4.2 и HTC one M7, Andorid 4.4.2:

  1. Сетевой общий ресурс папки для копирования на компьютер (Win 8)
  2. Используйте SyncMe Wireless для копирования файлов с компьютера на устройство

Насколько я вижу, даты модификации полностью сохранились!


0

Решение для резервного копирования с использованием «SanDisk Memory Zone» для сохранения даты и времени. копирование / перемещение файлов с устройства Android на внешнюю SDCard - протестировано на Samsung Note 2, Note 3 и Mini SIII

Просто сделайте резервную копию ваших файлов фотографий на SDCard и перенесите карту на другое устройство Android, ПК, Apple или другое устройство - если не используется для резервного копирования файлов фотографий, следуйте этой простой 8-ступенчатой ​​инструкции "

  1. Найдите в Google Play и установите «Зону памяти SanDisk».
  2. Запустите приложение и дождитесь окончания индексного файла.
  3. Выберите Резервное копирование / Восстановление и измените или отметьте настройки.
  4. Выберите место назначения карты памяти и что для резервного копирования (контакты, смс, фотографии, музыка и т. Д.).
  5. Проверьте требуемую и доступную емкость и перейдите на кнопку ПРОДОЛЖИТЬ.
  6. Дождитесь завершения резервного копирования.
  7. Теперь у вас есть копия файлов на вашей SDCard в «.memoryzone_backup / files / 1»
  8. Теперь вы можете перемещать файлы SD-карты, например фотографии, на Windows, Linux или другое устройство Android, сохраняя оригинальную метку времени.

копирование файлов на внешние SD-карты не вызывает проблем с отметкой времени модификации
AntonK

0

Быстрое и простое решение: просто используйте ПК или Mac, чтобы скопировать файлы со старой SD-карты (или ПК) на новую SD-карту. Используйте ПК / Mac с устройством чтения / записи SD-карт (есть конвертеры USB-SD-карт), который рассматривает карту как USB-накопитель FAT32. Когда вы закончите копирование, вставьте новую карту в телефон и перезагрузите компьютер.


0

Я переехал на Moto X 2014 и у меня возникла эта проблема.

Я тоже много чего перепробовал, решение было похоже на «Motorola Migrate» для синхронизации с WiFi двумя телефонами (старый пряничный бэкфлип). В галерее ситуация была хорошая (даже в деталях), но странным образом в файловом менеджере дата была изменена, и через несколько часов даже галерея также показала дату переноса.

Обходной путь, если файлов не слишком много, можно вручную скопировать один за другим, каждый раз меняя дату и время на телефоне.


0

У меня есть Nexus 4, и у меня была та же проблема с отметкой времени и фотографиями (действительно, со всеми файлами).

Вот командные строки (с рутированным телефоном), которые я использовал, благодаря посту в Ubuntu:

sudo apt-get install android-tools-adb

(в Ubuntu, если Android SDK не установлен)

adb devices
cd /media/my_backup_folder_where_i_put_a_folder_with_all_my_data_named_"savandroid"_in_it

Для того, чтобы зайти в мою папку «бэкап», в которой находится папка «savandroid»

adb root
adb push savandroid /sdcard

Все файлы и папки, находящиеся в «saveandroid», отправлены на SD-карту, работают хорошо, все отметки времени правильные!

Примечание : на Cyanogenmod мне пришлось выбрать root для «apps and adb» в меню разработчиков. По умолчанию это только для приложений.


0

Я добавлю свое решение, которое работало на Ubuntu

Сначала установите simple-mtpfs и установите fuse

cd ~
mkdir myphone
simple-mtpfs ~/myphone

Теперь у вас есть телефонные папки, смонтированные в этом каталоге, которые вы можете использовать rsync -tили cp -pкопировать фотографии, и время создания / изменения / доступа не будет изменено.

Работа для меня :)


В терминале, в то время как смонтировано с simple-mtpfs, временные метки отображаются как сохраненные. Но при доступе к файлам в телефоне метки времени сбрасываются.
Teresa e Junior

0

Чтобы скопировать файлы с вашего Android на ваш ПК, сохраняя временные метки:

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

Чтобы восстановить их обратно на Android:

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

Это работает путем создания файла tar внутри устройства, который сразу же извлекается на вашем хосте, и наоборот.

«V» позволяет увидеть имя копируемого файла.

Конечно, это предполагает, что у вас установлен "adb", что в телефоне включена отладка по USB и что вы уже проверили сертификат отладки.

sudo apt install adb

-1

Попробуйте приложение «Передача файлов Bluetooth», оно сохраняет дату изменения с перемещением. И я верю с копией тоже, но сначала попробуйте с одним файлом / папкой, чтобы убедиться. Он также может исследовать другое устройство через bluebooth.


Предоставление ссылки на приложения, которые вы рекомендуете, сделает этот ответ более полезным.
eldarerathis

-1

Используйте SyncMe Wireless и сетевой ресурс. Метки времени сохраняются, а синхронизация выполняется быстро. Я смог за 20 минут выполнить резервное копирование без компьютера на SD-карту в Kingston MobileLite Wireless, мгновенная повторная синхронизация.


Можете ли вы связать это приложение?
Мэтью Прочитал

Я мог найти только ссылку для SyncMe Wireless , но не «Сетевой ресурс», если вы на самом деле не имели в виду, что это одно приложение. Также предоставьте краткое резюме приложения и шаги, чтобы сделать это, если это возможно.
Андрей Т.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.