【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 現在時刻取得 - Qiita
- pythonでフォルダ内のファイル一覧をパス無しで取得する - Qiita
- 15.1. os — 雑多なオペレーティングシステムインタフェース — Python 2.6ja2 documentation
- os.stat(filename).st_ctime
- ファイルのタイムスタンプ取得 » Python Snippets
- Mac - ファイルのタイムスタンプを任意の時刻に変更する - Qiita
- 作者: Mark Lutz,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/02/26
- メディア: 大型本
- 購入: 12人 クリック: 423回
- この商品を含むブログ (130件) を見る
追記
どうせなので見なおしてコマンド化しました。 retasretas/tsinc