macOSで(HFS+の)タイムスタンプを表示するスクリプトをPython 3で書いてみました。といっても、subprocess.run()
で実行したls
の結果を整形しただけですけど。
tstamp(.py)
#!/usr/bin/env python3
import subprocess
import sys
def run_pipe(cmd):
return subprocess.run(cmd, stdout=subprocess.PIPE)
def get_date(info):
elem = info.split()
return '{} {:>2} {:>2} {}'.format(elem[8], elem[5], elem[6], elem[7])
if __name__ == '__main__':
if len(sys.argv) < 2:
print('Usage: tstamp file ...')
sys.exit(1)
filenames = sys.argv[1:]
for filename in filenames:
print('# {}'.format(filename))
cmd_create = ['ls', '-lUTd', filename]
info_create = run_pipe(cmd_create).stdout.decode()
date_create = get_date(info_create)
print('{} {}'.format('作成日: ', date_create))
cmd_content_mod = ['ls', '-lTd', filename]
info_content_mod = run_pipe(cmd_content_mod).stdout.decode()
date_content_mod = get_date(info_content_mod)
print('{} {}'.format('変更日(mtime): ', date_content_mod))
cmd_attribute_mod = ['ls', '-lcTd', filename]
info_attribute_mod = run_pipe(cmd_attribute_mod).stdout.decode()
date_attribute_mod = get_date(info_attribute_mod)
print('{} {}'.format('属性変更日(ctime):', date_attribute_mod))
cmd_access = ['ls', '-luTd', filename]
info_access = run_pipe(cmd_access).stdout.decode()
date_access = get_date(info_access)
print('{} {}'.format('アクセス日(atime):', date_access))
print('')
結果はこんな感じで表示されます(ターミナル.appではズレません)。
# .DS_Store
作成日: 2015 4 5 09:38:00
変更日(mtime): 2017 8 20 10:24:50
属性変更日(ctime): 2017 8 20 10:24:50
アクセス日(atime): 2017 8 20 10:24:50
UNIXの伝統的な3つのタイムスタンプとともにHFS+で追加されている作成日時が表示されます。
作成動機
ls
のタイムスタンプを選ぶオプションが覚えづらいからです。そもそもなぜ確認したかったというと.DS_Storeの存在。Finderで.DS_Storeのないフォルダを開くと新たに作成されることがあり、フォルダの更新日時を変えやがるからです。なので、-d
オプションを付けてフォルダを引数にとった場合もフォルダ自体のタイムスタンプを表示するようにしてあります。更新日時が変わるとFinderの整頓順序が意味をなさなくないですか? 余談ですが、Finderってアイコン表示で昇順・降順の切り替えってできないんですかね?
参考