OS:Linux Ubuntu
Android: Pixel8
Contents
Androidに写真をコピーするとタイムスタンプが上書きされてしまう。
Pixel8を買ったので、Pixel7で撮った写真はPCでサイズを圧縮してからPixel8に移して見れるようにしようと思ったのですが、PCにある写真をPixel8に移そうとすると、コピーになるのでタイムスタンプがそのコピーした時の時間になってしまい、Pixel8のフォトアルバムから見ようとしても日付ごとに表示されなくて不便。
写真や動画の撮影日時はファイル名にあるので、それを利用してAndroid上でスクリプトを実行しタイムスタンプを上書きします。
今回のような状況以外でも、Android上にあるファイルのタイムスタンプを書き換えるのに同じ方法でできます。
この方法なら一度既にコピーしてしまい、おかしいなと思った段階でタイムスタンプだけを変更できるので、大量の写真などをコピーし直す必要がありません。
Android開発ツールをLinux側にインストールする。
まずはシェルを開き、Android開発ツールをインストールします。
sudo apt-get install android-tools-adb android-tools-fastboot
スマホ側から、設定→このデバイスについて→ビルドナンバー
このビルドナンバーのところを7回タップします。するとディベロッパーモードになります。
スマホをPCにUSBケーブルで接続します。
スマホの設定の検索からUSBデバッギングを探しオンにします。
adbが既に起動してる場合は以下のコマンドで再起動します。
adb kill-server adb start-server
adb devices
デバイスが表示されることを確認します。これでAndroidにシェルからアクセスできます。
シェルモードでAndroidにアクセスしスクリプトを実行する。
シェルモードに入ります
adb shell
Downloadフォルダに行くなら
cd /sdcard/Download
Picturesフォルダに行くなら
cd /sdcard/Pictures
です。
今回の場合は Pictures/Pixel7Backup/ に移動、Bashスクリプトを書きます。
Vimでスクリプトを書きます。vi test.shでVimを起動してください。Vimではiで入力モード、Escでコマンドモードに変わります。入力モードで以下を入力してください。
jpgなどは実行するファイルの種類に合わせてください。sedの部分は自分の実行するファイル名に合わせて正規表現を書き換えてください。tsにタイムスタンプ用の時間が入ればOKです。タイムスタンプはYYYYMMDDHHmm.SSの形にします。
#!/system/bin/sh for f in ./PXL_*jpg do test -f "$f" || continue ts=$(basename "$f" .jpg | sed -e "s/^.*PXL_\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\)_\([0-9][0-9][0-9][0-9]\)\([0-9][0-9]\).*/\1\2\.\3/") echo "$f = $ts" touch -t "$ts" "$f" done
コマンドモードで:wqで保存・終了します。実行します。
sh ./test.sh
shじゃないと実行できないので注意です。
./PXL_20231011_124343653.jpg = 202310111243.43 ./PXL_20231011_171922799.jpg = 202310111719.22 ./PXL_20231011_204137209.jpg = 202310112041.37 ./PXL_20231011_212258571.jpg = 202310112122.58 ./PXL_20231011_212703565.jpg = 202310112127.03
こんな感じのアウトプットが出てくればタイムスタンプが写真のファイル名を元に書き換えられています。
Ubuntu側のGUIで確認すると意図したとおりのタイムスタンプに変わっています!成功です。
スマホ側でもタイムスタンプが変更され、時系列通りに見れるようになりました!便利です。
参考:https://siongui.github.io/2021/11/15/copy-file-to-android-preserve-timestamp/
https://askubuntu.com/questions/863587/adb-device-list-doesnt-show-phone#:~:text=Disconnect%20and%20reconnect%20your%20Android,android%2Fadb_usb.