メモ用サブブログ

子曰わく學びて時にこれを習う。

【Mac】Pythonで作成日が同時刻のファイルのタイムスタンプをインクリメントして一括変更するスクリプトを書いた

経緯と用途

自分は画像や動画等メディア系ファイルを保存した時に、名前のフォーマットがバラバラだと見た目が大変鬱陶しいので150124222459.jpgのようにファイル作成日の日付で揃えるようにしている。

リネームには「Name Mangler」というソフトを用いている。
中々優秀なソフトなのだが困ったことがひとつある。

タイムスタンプが同時刻だと名前が衝突してしまいリネームができなくなる。

Windowsでは「ファイル名変更君」というその名もズバリな素晴らしいソフトがあって、ファイル名変更君ではタイムスタンプを指定時刻から1秒ごとずらして変更するなど気の効いたこともでき、痒い所に手の届く丁寧な出来で重宝していた。

ところがMacには中々どうして、ファイル名変更君ほど優秀なソフトがない。Shupapanではタイムスタンプ変更ができるのだが、すべてのファイルが指定時刻に統一されてしまってこれでは使い物にならない。

そこでPythonでファイルのタイムスタンプを1秒づらしながら一括変更するスクリプトを書いた。

本当はシェルスクリプトでまかないたかったのだが未学者だし記法がクソすぎて学習コストが高いので慣れてるPythonで済ますことにした。(これだから永久にシェルスクリプトに手が回らない)

スクリプト

import os
import glob
import datetime

files = glob.glob('./*')
diffsec = 0
for file in files:
    diffsec += 1
    createdate_tap = datetime.datetime.now() + datetime.timedelta(seconds=diffsec)
    updatedate_tap = datetime.datetime.now() + datetime.timedelta(seconds=diffsec)
    times = (int(createdate_tap.strftime('%s')), int(updatedate_tap.strftime('%s')))
    os.utime(file, times)

使用方法と注意点

上のスクリプトをテキストファイルに貼り付け、適当な名前.pyで保存する。
タイムスタンプを変更したいファイルの入ったフォルダへこのファイルを置き、そのディレクトリでこのスクリプトを実行すると、そのディレクトリ内のすべてのファイルのタイムスタンプが現在時刻+差分秒へ置き換わる。

注意点としては、どうもMacでは、Pythonのos.utimeで作成日を変更しようとした時に実際の作成日より新しい日付には変更できないらしく、そのまま据え置きになってしまう。

なのでいつも作成日でファイル名を統一していた場合、更新日で変更することになる。

未検証だがMacのsettimeコマンドであれば、作成日より未来日付であっても変更が反映されるのかもしれない。(検証しろよ。)

参考

初めてのPython 第3版

初めてのPython 第3版

追記

どうせなので見なおしてコマンド化しました。 retasretas/tsinc