lsでソートして表示する方法

f:id:monozukuri-bu:20170812232728j:plain

どーも、xyakenです。普段はRubyでコード書いてますが、またコンソールネタです。私の端末に眠っていた自分用の技術メモ的なものを公開していきます。今回はlsでソートする方法のまとめです。

www.sw-cablog.jp もよろしく!

名前でソートする

名前順でソートする場合は、特にオプションは必要ありません。

$ ls -l
合計 0
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:00 1
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 06:00 2
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:28 3

最終変更時刻(mtime)でソートする

時間でソートする場合は、-tオプションを使います。デフォルトでは、最終変更時刻(mtime)でソートされる。

$ ls -lt
合計 0
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:28 3
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:00 1
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 06:00 2

逆順でソートする

ソートを逆順にしたい場合は、-rオプション(--reverseオプション)を使います。-rオプションは-tオプションに限らず、表示順番を逆に出来ます。

$ ls -ltr
合計 0
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 06:00 2
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:00 1
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:28 3

最終アクセス時刻(atime)でソートする

最終アクセス時刻(atime)でソートしたい場合は、-uオプションと-tオプションを使います。-uオプション単体では、最終アクセス時刻の表示を行うだけです。

$ ls -lu
合計 0
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:36 1
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 06:00 2
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:28 3
$ ls -lut
合計 0
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:36 1
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:28 3
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 06:00 2

参考までに最終ステータス変更時刻(ctime)を表示、ソートしたい場合は、-cオプションを使います。

ファイルサイズでソートする

ファイルサイズでソートする場合は、-Sオプションを使います。

$ ls -lS
合計 1032
-rw-rw-r-- 1 xyaken xyaken 1048576 12月  1 07:40 2
-rw-rw-r-- 1 xyaken xyaken    3072 12月  1 07:40 1
-rw-rw-r-- 1 xyaken xyaken    2048 12月  1 07:40 3

ファイル名のバージョン番号でソートする

バージョン番号でソートしたい場合は、-vオプションを使います。例えば、以下のようなファイルがあったとします。

$ ls -l
合計 0
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.1.tar.gz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.11.tar.gz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.9.tar.gz

この時、バージョン番号的には、1.1<1.9<1.11なわけですが、うまくソートされていません。このときに-vオプションを指定すると、きちんとソートされます。

$ ls -lv
合計 0
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.1.tar.gz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.9.tar.gz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.11.tar.gz

つまり、何が起きているかといえば、数字部分を数値としてソートしているということです。

拡張子でソートする

拡張子でソートしたい場合は、-Xオプションを使います。以下の例の通り-Xオプションをつけた場合、bz、gz、zipと拡張子でソートされているのが分かります。

$ ls -l
合計 0
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:49 foo-1.1.tar.bz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.1.tar.gz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:49 foo-1.1.zip
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.11.tar.gz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:49 foo-1.9.tar.bz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.9.tar.gz
$ ls -lX
合計 0
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:49 foo-1.1.tar.bz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:49 foo-1.9.tar.bz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.1.tar.gz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.11.tar.gz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:43 foo-1.9.tar.gz
-rw-rw-r-- 1 xyaken xyaken 0 12月  1 07:49 foo-1.1.zip

使いドコロがない気がしますが、ソートしない(ディスク上に存在する順番)で表示するには-Uオプションや-fオプション(-aUと等価)を使います。