SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【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

よい具合に並べてくれた。

関連するメモ

コメント