Plan9 の ls コマンドは、unix の ls コマンドと異なり、output が他のプログラムの input として扱いやすいように設計されている。
すなわち、ファイルやディレクトリの名前は1つの行に1つ、しかも形式は統一されている。
例えば
hebe% ls -l d-rwx------ M 35548 arisawa adm 0 Aug 30 18:35 bsd32 d-rwx------ M 35548 arisawa adm 0 Sep 29 18:28 bsd64 d-rwx------ M 35548 arisawa adm 0 Sep 29 18:44 maia d-rwxr-xr-x M 35548 arisawa adm 0 Oct 11 16:05 mbook --rw-r--r-- M 35548 arisawa adm 2303 Jul 10 13:52 memo d-rwx------ M 35548 arisawa adm 0 Sep 30 08:53 pi --rw-r--r-- M 35548 arisawa adm 230 Aug 30 18:45 xlist hebe%引数にフルパスを与えると
hebe% ls -l /usr/backup d-rwx------ M 35548 arisawa adm 0 Aug 30 18:35 /usr/backup/bsd32 d-rwx------ M 35548 arisawa adm 0 Sep 29 18:28 /usr/backup/bsd64 d-rwx------ M 35548 arisawa adm 0 Sep 29 18:44 /usr/backup/maia d-rwxr-xr-x M 35548 arisawa adm 0 Oct 11 16:05 /usr/backup/mbook --rw-r--r-- M 35548 arisawa adm 2303 Jul 10 13:52 /usr/backup/memo d-rwx------ M 35548 arisawa adm 0 Sep 30 08:53 /usr/backup/pi --rw-r--r-- M 35548 arisawa adm 230 Aug 30 18:45 /usr/backup/xlist hebe%となる。
それでも僕には不満がある。変更を受けた時刻の表現法で、時刻との関係で何かを処理したい場合に決定的に困る。
例えば次のように処理してほしいのだ。
d-rwx------ arisawa adm 0 2021/09/30 09:10:13 /usr/backup d-rwx------ arisawa adm 0 2021/08/30 18:35:28 /usr/backup/bsd32 d-rwx------ arisawa adm 0 2021/09/29 18:28:06 /usr/backup/bsd64 d-rwx------ arisawa adm 0 2021/09/29 18:44:24 /usr/backup/maia d-rwxr-xr-x arisawa adm 0 2021/10/11 16:05:02 /usr/backup/mbook --rw-r--r-- arisawa adm 2303 2021/07/10 13:52:29 /usr/backup/memo d-rwx------ arisawa adm 0 2021/09/30 08:53:50 /usr/backup/pi --rw-r--r-- arisawa adm 230 2021/08/30 18:45:09 /usr/backup/xlist時刻の表現法はいろいろあるだろうが、ともかく時刻をプログラムで処理しやすいように表現してほしい。
Plan9 の ls は再帰的にディレクトリのリストを表示しない。
unix の ls は再帰オプションを持っているが、あの output は全然なっていない。
時刻の表現に目を瞑れば、
du を使うwalk を使うls コマンドを使うので、時刻問題が処理できない。そこで自分で作ることにした。仕様は次のとおり: LR(1) LR(1)
NAME
lr
SYNOPSIS
lr [-QqilnaL] [-d depth] [-D depth] [-t time] path ...
DESCRIPTION
Lr lists directory recursively
Options:
-Q: unquoted format, instead TAB as separator (used only in combination with '-l')
-at time: show files accessed since the time (seconds since the unix epoch)
-d depth: search directory upto depth (depth >= 0)
-D depth: search directory of depth (depth >= 0)
-i: show date using iso-8601 style
-l: long format
-n: show date using unix epoch
-q: show qid
-t time: show files modified since the $time (seconds since the unix epoch)
-L: follow links (for unix)
時刻の表現は3通りサポートされている:2021/09/30 09:10:13 # default 2021-09-30 09:10:13 # iso 1632960613 # unix epoch
lr は
http:/netlib/cmd/lr
に置かれている。