いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

連番が付いているファイルをsortコマンドでいい感じにソート (-V, --version-sort)

概要

以下、自分用のメモです。使いたいときによく忘れるので、ここにメモメモ。。。

大した話では無いのですが、ファイル名に連番が付与されているものが複数存在している場合に、sortして表示したいときが結構あります。

んで、付与されている連番が 01 や 001 のようにゼロ埋めされている場合はソートしやすいのですが、単純に 1, 2, 3, ... のように振られている場合は、そのままソートしても望みの形になりません。

その場合は、sort -V でソートするといい感じにソートしてくれます。

試してみる

とりあえず、確認用に20ファイル作成。

$ touch data{1..20}.txt
$ ls
data10.txt  data12.txt  data14.txt  data16.txt  data18.txt  data1.txt   data2.txt  data4.txt  data6.txt  data8.txt
data11.txt  data13.txt  data15.txt  data17.txt  data19.txt  data20.txt  data3.txt  data5.txt  data7.txt  data9.txt

そのまま sort に繋いでみます。

$ ls -1 | sort
data10.txt
data11.txt
data12.txt
data13.txt
data14.txt
data15.txt
data16.txt
data17.txt
data18.txt
data19.txt
data1.txt
data20.txt
data2.txt
data3.txt
data4.txt
data5.txt
data6.txt
data7.txt
data8.txt
data9.txt

よく見る光景ですね。では、sort -V でやってみます。

$ ls -1 | sort -V
data1.txt
data2.txt
data3.txt
data4.txt
data5.txt
data6.txt
data7.txt
data8.txt
data9.txt
data10.txt
data11.txt
data12.txt
data13.txt
data14.txt
data15.txt
data16.txt
data17.txt
data18.txt
data19.txt
data20.txt

いい感じに表示されました。

-V (ロングオプションは --version-sort ) の説明は以下のようになっています。

natural sort of (version) numbers within text

参考情報

sort invocation (GNU Coreutils 9.1)


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。