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
に置かれている。