Logo address

lr

2021/10/19

ls のおさらい

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
時刻の表現法はいろいろあるだろうが、ともかく時刻をプログラムで処理しやすいように表現してほしい。

lr

Plan9 の ls は再帰的にディレクトリのリストを表示しない。
unix の ls は再帰オプションを持っているが、あの output は全然なっていない。

時刻の表現に目を瞑れば、

などいくつかの方法が考えられる。いずれも 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
この他に、ある与えられた時刻以降に変更を受けたものだけを表示するオプションがある。このオプションはバックアップツール1を作るときや、情報検索2において大いに役に立っている。

lr は
http:/netlib/cmd/lr
に置かれている。


注1. Backup system
http://p9.local/admin/server.html
注2. あとで紹介しますね