Skip to content

MetaCPAN の App::lasttouch と同じものをここで管理する。このモジュールは、コマンド lasttouch を提供する。あるディレクトリ配下の全てのファイルに対して、どの順番に変更(orアクセスor作成)されたかを、時刻情報と共に、新しい順に表示する。

Notifications You must be signed in to change notification settings

tulamili/App-lasttouch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This module provides a UNIX-like command `lasttouch'.

 Copyright (c) 2023 Toshiyuki SHIMONO. All rights reserved.
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.


■■ 概要 ■■

このモジュールをインストールすると、コマンドラインで、コマンドの lasttouch が
利用可能となる。このコマンドは、カレントディレクトリ(現行ディレクトリ) 又は
指定されたディレクトリについて、全てのファイルの日時情報3個の atime、mtime、
ctime のどれかを調べて、最も最近の日時順にファイルを並び替えて表示する。

3個の内どれを調べるかは、オプションによって指定可能であり、-a によりatime
つまりアクセスされた日時、-cによりctimeつまりファイルが作られた日時、どちらも
指定されない場合は mtime つまり変更日時となる。(ただし、OS (もしくは場合によっては
ファイルシステム)により、これら atimeとmtimeとctimeの3個の意味は異なる場合が
あるので注意が必要である。UNIX系のコマンド stat でこれらを出力が可能である。
App::madeafter の提供するコマンド madeafter で調べる方法もある。)


■■ コマンドの出力内容 ■■

出力は表形式である。見たディレクトリの下にある木構造全てを見るので、あまりに多数の
ファイルがある場合には、動作に時間がかかるが、5万個以下であれば1秒程度も掛かれないであろう。

> lasttouch 
diff_seconds   sec_before     byte_size file_name
1027.548905    1027.548905    1,612     ./README
620.223062     1647.771967    96        ./.git/refs/remotes/origin/
0.000551       1647.772517    304       ./.git/logs/refs/remotes/origin/main
0.002385       1647.774902    41        ./.git/refs/remotes/origin/main
2651.184021    4298.958923    448       ./.git/
0.012073       4298.970996    1,056     ./.git/objects/
0.182352       4299.153348    94        ./.git/FETCH_HEAD
10.726494      4309.879841    41        ./.git/ORIG_HEAD
1027935.212009 1032245.091851 2,844     ./blib/man3/App::lasttouch.3pm
0.008944       1032245.100795 128       ./blib/man3/
0.053898       1032245.154693 3,088     ./blib/man1/lasttouch.1
0.006628       1032245.161322 128       ./blib/man1/
Files processed : 137 ; Shown above : 12 ;  Elapsed seconds : 0.002854

出力の各列は、左から順に、マイクロ秒単位で、(1) 時間差 (2) 今から何秒前であるか
そして、(3) そのファイルのバイトサイズ (4) ファイル名となる。
コマンド lasttouch にオプション -1 を添えると、出力表に yyyy-mm-dd HH:MM:SS 形式の
日時も出力される。


■■ 考えられる利用シーン ■■

 ● 何かアプリケーションソフトウェアを利用し始めた直後に、どのファイルにアクセス
    されたのか知りたい場合。(Macであれば /Application や /Library の下を探せば
    良いだろう。) どのファイルに情報があるのか推定したい時。

 ● git等のバージョン管理で内部ファイルをどの順にアクセスしたり変更したから知りたい場合。

 ● ソフトウェアで、どのファイルの処理に時間が掛かったか知りたい時。どの処理がどの順番で
   行われたか知りたい時。

 ● 自作のソフトウェアの動作の様子をよく確認したい時。

■■ よく使うオプション ■■

  -g NUM : 何個取り出すか。未指定なら12。 less と組み合わせて 10000 を指定しても良い。
  -d 0   : 途中で現れるディレクトリについての情報は調べない。

■■ このコマンド作成で工夫したこと ■■

 - オブジェクト指向を採用。途中で package 関数が現れ、bless 関数を使っている。
 - なお、ファイルのatimeとmtimeを変更するutime 関数は使っていない。
 - なお、懸案として、ディレクトリのアクセス時刻がこのコマンドの実行時に現在時刻に変更されるかもしれない。

About

MetaCPAN の App::lasttouch と同じものをここで管理する。このモジュールは、コマンド lasttouch を提供する。あるディレクトリ配下の全てのファイルに対して、どの順番に変更(orアクセスor作成)されたかを、時刻情報と共に、新しい順に表示する。

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages