Takeout JSON
JA

adb で Android の写真のファイルの日付を直す方法

パソコンから adb と touch で Android スマホの写真のファイルの日付を設定し、スクリーンショットやチャットの画像、コピーした写真をギャラリーの正しい日に戻す方法を説明します。

Android の写真のファイルの日付を直すには、USB デバッグをオンにしてスマホをつなぎ、adb shell touch -m -d "2019-07-14 11:05:00" "/sdcard/DCIM/Camera/photo.jpg" を実行します。そのあと adb shell content call --uri content://media/ --method scan_volume --arg external_primary で、ギャラリーに読み直させます。ギャラリーは、中に撮影日時がない写真をすべてファイルの日付で並べるので、これでそうした写真が本来の日に戻ります。

この方法が合うとき

ギャラリーは写真の中の撮影日時で並べます。撮影日時がないときだけ、ファイルの日付を使います。そのため、この方法が効くのは次のような写真です。

  • スクリーンショットと画面録画
  • WhatsApp、Telegram などのチャットの画像
  • 「ファイル転送」でスマホにコピーして、ファイルの日付が今日になった写真
  • 日付を保たないバックアップアプリで復元した写真

写真の中の撮影日時が間違っているなら、ファイルの日付を変えても直りません。撮影日時を変更してください。Android で写真の日付を変更する方法 をご覧ください。

必要なもの

  • USB デバッグがオンになっていること:Android で USB デバッグをオンにする方法
  • パソコンに Google の adb(「SDK Platform-Tools」に入っています)
  • スマホがつながって許可済みで、adb devices で device と表示されること

まず日付を見る

adb shell stat -c '%y %n' "/sdcard/DCIM/Screenshots/*"

1 行ごとに、ファイルの日付と名前が表示されます。すべてのファイルが同じ日、つまりコピーした日になっているフォルダーが、直すべきフォルダーです。

1 つのファイルの日付を設定する

adb shell touch -c -m -d "2019-07-14 11:05:00" "/sdcard/DCIM/Screenshots/Screenshot_20190714-110500.png"

-m は更新日時を設定します。ギャラリーが読むのはこの日付です。-c は、名前を打ち間違えたときに touch が空のファイルを作らないようにします。-c がないと、打ち間違いで 0 バイトのファイルが残ります。

時刻はスマホのタイムゾーンで読まれます。正確に指定したいときは、代わりに 1970 年からの秒数を使います。-d @1563095100

たくさんのファイル:名前から日付を取る

ほとんどのスマホやチャットアプリは、ファイル名に日付を入れます。Screenshot_20190714-110500.png、IMG-20220925-WA0018.jpg、IMG_20220104_184121.jpg などです。パソコンで短いスクリプトを使えば、こうした名前を日付に変え、ファイルごとに 1 行の touch をスクリプトに書き出せます。それをスマホでまとめて実行します。

adb push dates.sh /data/local/tmp/
adb shell sh /data/local/tmp/dates.sh
adb shell rm /data/local/tmp/dates.sh

数千行のスクリプト 1 本なら数秒で終わります。adb のコマンドを数千回別々に実行すると、数分かかります。

ギャラリーに知らせる

adb shell content call --uri content://media/ --method scan_volume --arg external_primary

これで Android のメディアスキャナーがすべてのファイルを読み直します。写真の多いスマホでは 1、2 分かかります。Android 9 以前では、代わりにファイルごとに次を実行します。

adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d "file:///sdcard/DCIM/Screenshots/photo.png"

確かめる

もう一度 stat コマンドを実行してから、ギャラリーを開きます。写真が本来の日に並んでいるはずです。

コマンドを使わずに同じことをする

「Takeout JSON Metadata Fixer」の「Android スマホ」タブ(Windows 版のみ)なら、フォルダーごとにこれができます。スマホのフォルダーを選ぶと、アプリが写真ごとに日付を読み取ります。まず写真の中の撮影日時、なければ名前、それもなければファイルの日付です。何が変わるかを見せてから、1 回の操作で日付を設定します。どの変更も元に戻せます。

よくある質問

touch で写真そのものは変わりますか?

変わりません。変わるのは、ストレージがファイルについて記録している日付だけです。写真と EXIF はそのままです。

Google フォトのクラウドにある写真にも使えますか?

使えません。スマホに保存されているファイルにだけ使えます。Google フォトにしかない写真は、Google フォトのアプリで日付を変更してください。

作成日時も設定できますか?

Android のストレージでは作成日時を設定できません。ギャラリーアプリが使うのは更新日時です。