元のタイムスタンプを保持しながら、Android Jelly Beanデバイスに写真を転送するにはどうすればよいですか?


25

最近Nexus 4を購入しましたが、以前のデバイスの写真をNexus 4に転送したいと思います。以前のAndroidスマートフォンは標準のUSB大容量ストレージを使用していたため、コピーやコピーの際に問題が発生しませんでしたが、Nexus 4は他の多くの最新のAndroidスマートフォンと同様に、MTPを代わりに使用し、オリジナルのコピーを拒否する興味深い機能を備えています代わりに、ファイルがコピーされている日付を使用して、ファイルの日付/タイムスタンプ。

これは写真に関しては明らかに大きな問題です。電話での閲覧中に写真が撮影された元の日付を確認できないだけでなく、完全にソートされていないためです。

元のタイムスタンプを保持するUSB​​大容量ストレージをサポートしていないJelly Bean Androidスマートフォンに写真を転送する方法はありますか?

私が今までに試したこと:

  • USB MTPを介した転送
  • ADBプッシュ(フルフォルダーと個々のファイルの両方)
  • SSH経由の転送(SSHDroid + WinSCPを使用)
  • Dropboxからのアップロードとダウンロード
  • MTPを介してZIPファイルを転送し、電話でファイルを解凍する
  • Bluetooth経由で他の電話から転送する
  • QuickPic「日付修正」機能
  • ローカル同期
  • 写真の日付修正
  • FTPSyncX
  • のろし
  • 電話で叫んで

それらのどれもタイムスタンプを保存せず、これは私を狂気にさせています。

(また、私はまだ根付いていませんが、唯一の実行可能な方法が根を必要とする場合、私はその答えも歓迎します。)


Androidは.tarファイルの展開をサポートしていますか?その場合は、写真の.tarファイルをコピーできます。解凍によって個々のファイルのタイムスタンプが変更されるかどうかはわかりません。
チャンス

@Chanceはそれを以前に試しましたが、どちらも助けにはなりませんでした。問題は、デフォルトでタイムスタンプを書き込む権限がないことです。したがって、今すぐにルート化する以外にできることはありません。
マーン

また、この質問に賛同したすべての人に:ありがとう。SEサイトの仕組みでは、1つの回答しか受け入れられませんが、ここのすべての回答は何らかの形で役立ちました。
マーン

回答:


10

FAT32(ただしFUSE)を使用していない場合、これはAndroid 4.0+の/ sdcardフォルダーの現在のアクセス許可の問題(バグレポートはこちら)です。

理由:FAT32から、単一のファイルシステム上のアプリとメディアデータ(ext4を使用)の両方に対する統合ユーザーストレージへの移行があります。

ユーザーがアプリやデータ用のスペースを使い果たしている間に、OEMが音楽用に多くのGBの内部ストレージを搭載していることにうんざりしていました。このアプローチにより、すべてを1つのボリュームにマージできます。

-Dan Morrill、GoogleのAndroidエンジニア

古いFAT32プロパティは、FUSEレイヤーを使用してエミュレートされ、既存のアプリと互換性があります。また、Nexus 7以降のGoogleデバイスの/ data /および/ sdcardは単一のパーティションのみを使用します(/ data / mediaは「sdcard」コンテンツを表し、FUSEレイヤーを使用してアプリに公開されます)。

ソースの表示に関心がある場合の、CyanogenModのFUSEドライバの実装は次のとおりです。ただし、タイムスタンプ属性の設定が実装されているようです。

編集:ルートでのみ動作します。

正確な理由:すべてのファイルはroot.sdcard_rwが所有しています(こちらを参照)。

uid = 0を持たない呼び出し側はutimensat()syscallを呼び出すことができません。現在以外のタイムスタンプで既にVFSレイヤー(EPERM)で失敗します

  1. 呼び出し元の実効ユーザーIDは、ファイルの所有者と一致する必要があります。または
  2. 呼び出し元には適切な特権が必要です。

両方のタイムスタンプを現在の
時刻に設定する以外の変更を行う(つまり、時刻がNULLではなく、両方のtv_nsecフィールドが
UTIME_NOWではなく、両方のtv_nsecフィールドがUTIME_OMITではない)には、
上記の条件2または3を適用する必要があります。


情報をありがとう、これがグーグルができることであり、私が問題を伝えることができる限り、問題はヒューズ層またはmtpプロトコルではなく、そこに設定された厳格な特権であるため、以下に掲載されているPhoto Date Correctionアプリはgalaxy nexusなどの古い4.0ヒューズ/ mtpベースのデバイスで動作するようだったので、方法はかなり新しいように見えます(4.2.1?)。
マーン

2
将来の読者向けの更新:4.2.2では未修正のままです。
マーン

2
さらに多くの将来の読者向けの更新:6.0マシュマロでは修正されていません。
マーン

6

最近、Nexus 5でこの問題に遭遇し、ここにリストされているほとんどのソリューションを試してみました。私の場合、ストックAndroid(ソース)で認識されているバグが原因のようです。

私の解決策は次のとおりでした-Windows 8.1を使用しましたが、これがOSX / Linuxで機能しない理由はありません(ただし、デバイスにはルートが必要です)。

  1. PCで、転送するすべてのファイルの.tar.gzアーカイブを作成します。

    • これには7zipを使用しました-Windowsで言及する価値があるので、最初に.tarアーカイブを作成してから、.gz圧縮を適用する必要があります。
  2. FTPを使用してアーカイブをデバイスに転送し、MFMTコマンドが使用されていることを確認します。

    • FTPサーバー は、デバイス側でMFMTをサポートしています。インストールして有効にするだけで、追加の設定は不要です。
    • PCではFilezillaを使用しました - 転送>転送されたファイルのタイムスタンプを保持するがチェックれていることを確認する必要があります。
  3. デバイスで、シェルでrootとしてアーカイブを抽出します。

    • ターミナルエミュレータを使用して、まずsuコマンドを使用してルートアクセス権があることを確認します。SuperSUがポップアップした場合、アクセスを許可する必要があります。
    • cdコマンドを使用して、現在.tar.gzアーカイブを含むディレクトリに移動します。例: 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データはそこにあり、アプリは使用時にタイムスタンプを正常に変更したと報告しましたが、同じままでした。ギャラリーのキャッシュも再起動して削除しましたが、それは役に立ちませんでした。アプリにはルートが必要ですか?タイムスタンプになんらかの書き込み保護があるように見えますが、それは何も克服することができません。
マーン

4

これは、MTPのみを持ち、大容量ストレージモードを持たないデバイスに遭遇したときに、本当に悩ましい質問です。私も、Mahnとまったく同じ理由で懸念しています。

いくつかのテストの後、タイムスタンプを保存できる可能性のある一時的な解決策を見つけました。

外部のSDカード/ OTGカードリーダーを使用し、-aを指定したcpコマンドを使用すると、タイムスタンプを保存できます。ただし、電話をルート化する必要があります。

  1. 最初にデータをSDカードにコピーします。
  2. メモリカードスロット/ OTGカードリーダーで読む
  3. adbシェルを使用してルート権限を取得(su)
  4. cp -a *カードから内部メモリへのデータ。

4

別の回答で述べたように、SDカードエミュレーションにFUSEを使用するデバイス(最新のNexusデバイスなど)では、rootのみがのファイルのタイムスタンプを変更できます/sdcard。MTPやADBなどはルートとして実行されないため、これらのメソッドでタイムスタンプを保持することはできません。ただし、デバイスがルート化されている場合、後で別の手順でタイムスタンプを修正できます。

/sdcardLinux PCからタブレットへの完全バックアップを復元する際、次のコマンドを使用してファイルをアップロードした後、このコマンドを使用してすべてのタイムスタンプを修正しました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、デバイス上に対応するPC上のディレクトリのルートから実行する必要があります。(または、完全/sdcardバックアップ以外のものをアップロードした場合は、touchコマンドの最後近くでパスを変更します。ただし、touchコマンドのディレクトリに対応するPC上の任意のディレクトリから実行する必要があります。)

動作方法は、PC側のすべてのファイルを調べ、それぞれのタイムスタンプを取得touchし、デバイスでルートとしてコマンドを実行して、対応するファイルのタイムスタンプをそこに設定することです。

これsuにより、個々のファイルごとに個別のコマンドが実行されることに注意してください。ルートプログラム(SuperSUなど)でログを有効にしている場合は、大量のログエントリが生成されないように、無効にすることができます。また、suリクエストごとに確認を求めるようにデバイスを設定している場合は、おそらく一時的に変更する必要があります。(touchコマンドのストリームをデバイス上の単一のルートシェルにパイプするバリエーションを考え出すことは可能かもしれませんが、それを行う簡単な方法は試してみたときにうまくいかず、使いたくありませんでしたそれに多くの時間。)

Android 5.1を実行しているNexus 10でこれを使用して成功しました。


2

私はまったく同じ問題を抱えています。Stock JellyBean 4.2.1を実行しているNexus 4のヒューズによってブロックされているようです。

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
当面の私の「解決策」は、過去の携帯電話から写真を時系列で一度に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スクリプトとして:Windows経由のmtpとadbプッシュの両方は、私の場合では最初の1000ファイル程度の後に接続を切断し、さらにいくつかのファイルがランダムに破損します、あなたは同じを見ていますか?基本的にこの問題のように、ここで説明しますcode.google.com/p/android/issues/detail?id=35185(これは直接のタイムスタンプそのものとは関係ありませんので、おそらく私は、別の質問をしなければならお奨めの愛のMTPけれども。)
マーン

2

Google Photoアプリを使用していて、ファイルを正しい順序でリストしたい場合は、解決策があります。

問題の背景

これはAndroidのバグです。非ルートユーザーがファイルの変更日を変更することは許可されていません(https://code.google.com/p/android/issues/detail?id=18624 FUSEファイルシステムでのマルチユーザー/サンドボックスの導入以来) 。また、MTPプロトコル(https://code.google.com/p/android/issues/detail?id=92635)でファイルをコピーするときにタイムスタンプを保持しません。

Googleフォトユーザーの回避策

写真は、利用可能な場合はEXIF情報を使用して注文されるため、適切なEXIFデータを設定する方法を使用できます。どのカメラでもこれを自動的に設定する必要があります。カメラの日付/時刻が正しいことを確認してください。

動画の場合、またはEXIFデータを設定したくない場合は、https://photos.google.com/にアクセスして、そこから動画/写真をアップロードしてください。コンピューターにある変更タイムスタンプが保持され、デバイスと同期されているため、アップロードが完了するとすぐに、アプリで写真が正しく並べ替えられて表示されます。


1

FolderSyncなどの同期ツールを使用します。これはタイムスタンプを適切に処理する必要があります。同期ツールは、タイムスタンプを含む同期コピーを実際に維持するすべての側面の処理に特化する必要があります。


いくつかの同期ツールを試しましたが、何らかの保護があると思うので、タイムスタンプを同期するツールはありませんでした。答えてくれてありがとう。
マーン

あなたは試すましたFTPSyncXトライアル?おそらく最も洗練された外観ではありません(開発者はデザイナーではありません)。しかし、私はすでに約1年間Proを使用しており、SFTP / SSHを介してタイムスタンプを正常に同期します(私が使用する唯一のプロトコル-アプリはさらに処理できます)。
イジー

私はそれをチェックしますが、SSHDroidが私のために機能しなかったと考えると、タイムスタンプも取得できません。
マーン

きっとそうなるでしょう。その部分が開発者にとってどれほど辛かったのかを今でも覚えています-Skypeで問題を議論するために何時間も座っていました:)痛くないよね?そして、それがどのように機能したか教えてください...
イジー

なし。電話のクライアントとしてのFTPSyncX試用版、ラップトップのサーバーとしてのfreeSSHd、STP / SSHを介してファイルを接続および同期できますが、電話に転送された写真のタイムスタンプは現在の日付に上書きされます。
マーン

1

NEXUSデバイスで変更された日付の保存---ルートは不要---

  • AndroidからPCへ:MTPを使用
  • PCからAndroidへ:Droid Explorerを使用します

乾杯.. :)

変更日を保持します。私は、Droid Explorerがそれをどのように行うのか知りません。しかし、それだけで動作します。

Droid Explorerを使用する前に、USBデバッグがオンになっていることを確認してください。

えーと。ただし、制限が1つあります。DroidExplorerで転送できるのはファイルであり、フォルダーではありません。

  • Droid Explorerを使用して、特定のフォルダーのAndroidフォンにファイルをコピーします
  • 次に、Android内のファイルマネージャーで、これらのファイルを目的のフォルダーに移動します。コピーは使用しないでください。コピーは変更された日付を変更しますが、カットは変更しません。

Droid ExplorerにはROOTが必要ですよね?
アントン14年

@AntonKはいDroid Explorerにはタイムスタンプを保持するためにルートが必要です。ルートが利用できない場合には、日付を上書きします:maxrev.de/...
mgutt

1

電話機をUSBで接続するときは、MTPではなくPTPを使用します。私にとってはうまくいきます。Ubuntu14.04マシンに接続されたSamsung Note 4を使用しています。ただし、PTPとして接続できるのは、写真/画像のコピーのみです。ファイル(bluetooth、WIFI、ファイルマネージャー)を外部ドライブにコピーする他のすべての方法では、日付が変更されます。


CM 12.1(Android 5.1.1)を使用して、Windows 10とNote 3でテストしました。ファイルを移動しました(ウィンドウが保存できる唯一の方法)が、タイムスタンプが保存されませんでした。:(
mgutt

0

MTPを使用したAndroidデバイスでのファイルコピー中に変更日を保持するための私のソリューション:

LG G2ストック(ルートなし)、Andorid 4.4.2およびHTC one M7、Andorid 4.4.2でテスト済み:

  1. コンピューターにコピーするフォルダーのネットワーク共有(Win 8)
  2. SyncMe Wirelessを使用して、コンピューターからデバイスにファイルをコピーします

私が見る限り、修正日は完全に保存されています!


0

タイムスタンプの日付を保持するために「SanDisk Memory Zone」を使用するバックアップソリューション。Androidデバイスから外部SDカードへのファイルのコピー/移動-Samsung Note 2、Note 3、およびMini SIIIでテスト済み

写真ファイルをSDCardにバックアップし、カードを他のAndroid、PC、Appleまたは他のデバイスに移動するだけです。写真ファイルのバックアップに使用しない場合は、この8つの簡単な手順に従ってください」

  1. Google Playで検索し、「SanDisk Memory Zone」をインストールします。
  2. アプリを起動し、インデックスファイルが完了するのを待ちます。
  3. [バックアップ/復元]を選択し、設定を変更またはマークします。
  4. メモリカードの保存先とバックアップ対象(連絡先、SMS、写真、音楽など)を選択します。
  5. 必要な空き容量を確認し、ボタンを続ける。
  6. バックアップが完了するのを待ちます。
  7. これで、「。memoryzone_backup / files / 1」上のSDCardにファイルのコピーがあります
  8. これで、写真などのSDカードファイルをWindows、Linux、または元のタイムスタンプを保持する他のAndroidデバイスに移動できます。

外部SD-カードにファイルをコピーすると、変更のタイムスタンプに問題が発生しない
AntonK

0

すばやく簡単なソリューション:PCまたはMacを使用して、古いSDカード(またはPC)から新しいSDカードにファイルをコピーするだけです。カードをFAT32 USBストレージと見なすSDカードリーダー/ライター(USBからSDカードへのコンバーターがあります)を搭載したPC / Macを使用します。コピーが完了したら、新しいカードを電話機に再挿入して再起動します。


0

Moto X 2014に移行し、この問題が発生しました。

私も多くのことを試しましたが、解決策はWiFi 2台の電話(古いジンジャーブレッドのバク転)と同期するための「Motorola Migrate」のようでした。ギャラリーでは、状況は(詳細であっても)良好でしたが、奇妙なことにファイルマネージャーでは日付が変更され、数時間後にギャラリーでも転送日が表示されました。

ファイルが多すぎない場合の回避策は、手動で1つずつコピーし、電話の日付と時間を変更することです。


0

Nexus 4を使用していますが、タイムスタンプと写真(すべてのファイル)で同じ問題が発生しました。

以下は、Ubuntuの投稿のおかげで使用したコマンドライン(ルート化された電話付き)です。

sudo apt-get install android-tools-adb

(Android SDKがインストールされていない場合はUbuntuで)

adb devices
cd /media/my_backup_folder_where_i_put_a_folder_with_all_my_data_named_"savandroid"_in_it

フォルダ「savandroid」を含むフォルダ「backup」に移動するには

adb root
adb push savandroid /sdcard

「saveandroid」にあるすべてのファイルとフォルダーは、すべてのタイムスタンプが正しい状態で正常に機能するSDカードに送信されます。

:Cyanogenmodでは、開発者メニューで「apps and adb」のルートを選択する必要がありました。デフォルトでは、アプリでのみ設定されます。


0

Ubuntuで動作するソリューションを追加します

最初にsimple-mtpfsをインストールし、fuseをインストールします

cd ~
mkdir myphone
simple-mtpfs ~/myphone

このディレクトリに電話フォルダをマウントしたら、を使用するrsync -tcp -p、写真をコピーできます。作成/変更/アクセスされた時間は変更されません。

私のために働く:)


端末では、simple-mtpfsでマウントされている間、タイムスタンプは保持されているように見えます。ただし、電話機のファイルにアクセスすると、タイムスタンプはすべてリセットされているようです。
テレサeジュニア

0

タイムスタンプを保持したままAndroidからPCにファイルをコピーするには:

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

それらをAndroidに復元するには:

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

これは、デバイス内にtarファイルを作成することで機能します。tarファイルはホスト上ですぐに抽出され、その逆も同様です。

「v」を使用すると、コピーされるファイルの名前を確認できます。

もちろん、これは、「adb」がインストールされていること、電話機でUSBデバッグが有効になっていること、およびデバッグ証明書がすでに検証されていることを前提としています。

sudo apt install adb

-1

「Bluetooth File Transfer」アプリを試してください。移動すると変更日が保存されます。そして、私もコピーを信じていますが、確認するために最初に1つのファイル/フォルダで試してください。blueboothを介して他のデバイスを探索することもできます。


推奨するアプリへのリンクを提供すると、これがより便利な回答になります。
-eldarerathis

-1

SyncMe Wirelessとネットワーク共有を使用します。タイムスタンプは保持され、同期は迅速です。コンピューターなしでKingston MobileLite WirelessのSDカードに20分でバックアップし、すぐに再同期することができました。


このアプリをリンクできますか?
マシュー

SyncMe Wirelessのリンクは見つかりましたが、実際には単一のアプリを意味するのでない限り、「ネットワーク共有」は見つかりませんでした。また、アプリの簡単な概要と、可能であればそれを実行する手順を提供します。
アンドリューT.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.