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 のストレージでは作成日時を設定できません。ギャラリーアプリが使うのは更新日時です。