-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
72 lines (52 loc) · 4.14 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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 関数は使っていない。
- なお、懸案として、ディレクトリのアクセス時刻がこのコマンドの実行時に現在時刻に変更されるかもしれない。