[Python] 同じ日付に変更したファイルの一覧を表示するスクリプト

誰得?俺得!なスクリプトですが、下記のような用途で使えるかもしれません。

  • アプリで書き換えられるファイル一覧が知りたい
  • 特定の時期に変更(改造)されたファイル一式が知りたい

バージョン管理が無い環境ですね、分かります。

printEditFileList.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os, time
from stat import *
from optparse import OptionParser

# 検索を始めるデフォルトディレクトリ
path = './'

# ファイルのリスト
filelist = []

# 引数の解析
parser = OptionParser()
parser.add_option("-d", "--dir", dest="directory", type="string",
                  help=u"検索するディレクトリ")

(options, args) = parser.parse_args()

# オプションで指定された場合はディレクトリを変更する。
if(options.directory) :
    path = options.directory

# 指定のディレクトリ以下のファイルとタイムスタンプのリストを作る。
for root, dirs, files in os.walk(path) :
    for file in files :
        filename = os.path.join(root, file)
        stat = os.stat(filename)
        timestamp = time.strftime("%Y/%m/%d", time.localtime(stat[ST_MTIME]))
        filelist.append((timestamp, filename))

# タイムスタンプでソート
filelist.sort()

# タイムスタンプが同じ日付が判断する。
def isSameDate(timestamp, oldtimestamp=[]) :
    if(not oldtimestamp) :
        oldtimestamp.append(timestamp)
        return False
    if(oldtimestamp[0] == timestamp) :
        return True
    else :
        oldtimestamp[0] = timestamp
        return False

# タイムスタンプとファイルを表示する。
for timestamp, filename in filelist :
    if(isSameDate(timestamp)) :
        print '  ' + filename
    else :
        print timestamp + ' : '
        print '  ' + filename
実行結果
> python printEditFileList.py 
2009/10/23 :
  ./touch.py
2009/10/24 :
  ./complete.py
2009/10/27 :
  ./pydoc.bat
2010/02/22 :
  ./.svn\text-base\complete.py.svn-base
  ./.svn\text-base\pydoc.bat.svn-base
  ./.svn\text-base\touch.py.svn-base
  ./createEvidenceHTML.pyc
2010/02/23 :
  ./.svn\text-base\createEvidenceHTML.py.svn-base
  ./createEvidenceHTML.py
2010/03/07 :
  ./.svn\all-wcprops
  ./.svn\entries
  ./.svn\text-base\printEditFileList.py.svn-base
  ./printEditFileList.py
ヘルプの表示
> python printEditFileList.py -h
Usage: printEditFileList.py [options]

Options:
  -h, --help            show this help message and exit
  -d DIRECTORY, --dir=DIRECTORY
                        検索するディレクトリ

勉強用に、引数の解析とかもしてたりします。
後、静的変数が使えない(?)ようなので、無理やりデフォルト引数にリストを指定して実現してたりします。


リファクタリングはいつか・・・orz