【linux】lsコマンドでファイル名の数値順に並べる
問題
lsコマンドって、こういう順で出力しますよね(辞書順)。1,2,3,4...(数値順)って無理ですか。
1.jpg 10.jpg 18.jpg 2.jpg 20.jpg 3.jpg 5.jpg
答え
lsコマンドには、オプションで -v バージョン順 というのがある。
$ touch {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}.jpg (ファイルを作って)
$ ls -v1 (-v バージョン順で -1 一行で)
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
10.jpg
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
20.jpg
数値順になった。
もうちょっと複雑な例
$ touch {a,b,c}.{1,2,3,10,11,12,20,21,22,30}.jpg
$ ls -v1
a.1.jpg
a.2.jpg
a.3.jpg
a.10.jpg
a.11.jpg
a.12.jpg
a.20.jpg
a.21.jpg
a.22.jpg
a.30.jpg
b.1.jpg
b.2.jpg
b.3.jpg
b.10.jpg
b.11.jpg
b.12.jpg
b.20.jpg
b.21.jpg
b.22.jpg
b.30.jpg
c.1.jpg
c.2.jpg
c.3.jpg
c.10.jpg
c.11.jpg
c.12.jpg
c.20.jpg
c.21.jpg
c.22.jpg
c.30.jpg
さらにバージョンらしい形に、メジャーバージョン、マイナーバージョンのような数字をつけると?
$ touch {a,b,c}.{1,10,20}.{1,2,3,10,11,12,20,21,22,30}.jpg
$ ls -v1
a.1.1.jpg
a.1.2.jpg
a.1.3.jpg
a.1.10.jpg
a.1.11.jpg
a.1.12.jpg
a.1.20.jpg
a.1.21.jpg
a.1.22.jpg
a.1.30.jpg
a.10.1.jpg
a.10.2.jpg
a.10.3.jpg
a.10.10.jpg
a.10.11.jpg
a.10.12.jpg
a.10.20.jpg
a.10.21.jpg
a.10.22.jpg
a.10.30.jpg
a.20.1.jpg
a.20.2.jpg
a.20.3.jpg
a.20.10.jpg
a.20.11.jpg
a.20.12.jpg
a.20.20.jpg
a.20.21.jpg
a.20.22.jpg
a.20.30.jpg
b.1.1.jpg
b.1.2.jpg
b.1.3.jpg
b.1.10.jpg
b.1.11.jpg
b.1.12.jpg
b.1.20.jpg
b.1.21.jpg
b.1.22.jpg
b.1.30.jpg
b.10.1.jpg
b.10.2.jpg
b.10.3.jpg
b.10.10.jpg
b.10.11.jpg
b.10.12.jpg
b.10.20.jpg
b.10.21.jpg
b.10.22.jpg
b.10.30.jpg
b.20.1.jpg
b.20.2.jpg
b.20.3.jpg
b.20.10.jpg
b.20.11.jpg
b.20.12.jpg
b.20.20.jpg
b.20.21.jpg
b.20.22.jpg
b.20.30.jpg
c.1.1.jpg
c.1.2.jpg
c.1.3.jpg
c.1.10.jpg
c.1.11.jpg
c.1.12.jpg
c.1.20.jpg
c.1.21.jpg
c.1.22.jpg
c.1.30.jpg
c.10.1.jpg
c.10.2.jpg
c.10.3.jpg
c.10.10.jpg
c.10.11.jpg
c.10.12.jpg
c.10.20.jpg
c.10.21.jpg
c.10.22.jpg
c.10.30.jpg
c.20.1.jpg
c.20.2.jpg
c.20.3.jpg
c.20.10.jpg
c.20.11.jpg
c.20.12.jpg
c.20.20.jpg
c.20.21.jpg
c.20.22.jpg
c.20.30.jpg
よい具合に並べてくれた。