ソフトウェアリリースバージョンであるディレクトリのリストが与えられた場合、ls -l
人間が好む形式に分類する方法は? 例えば:
$ ls -loghF 合計 209 drwxr-xr-x 2 3 6 月 18 日 11:33 12.0.40.0/ drwxr-xr-x 2 3 8 月 24 日 14:45 13.0.11.10/ drwxr-xr-x 2 3 7 月 13 日 14:12 13.0.11.4/ drwxr-xr-x 2 3 7 月 26 日 15:30 13.0.11.5/ drwxr-xr-x 2 4 7 月 27 日 11:33 13.0.11.6/ drwxr-xr-x 2 3 8 月 3 日 11:41 13.0.11.7/ drwxr-xr-x 2 3 8 月 10 日 11:53 13.0.11.8/ drwxr-xr-x 2 3 8 月 17 日 17:00 13.0.11.9/ drwxr-xr-x 2 3 8 月 3 日 14:37 13.0.17.0/ drwxr-xr-x 2 3 8 月 13 日 11:50 13.0.18.0/ drwxr-xr-x 2 3 8 月 17 日 11:21 13.0.19.0/ drwxr-xr-x 2 3 7 月 28 日 15:00 13.0.9.1/
望ましい結果は次のとおりです。
$ ls -loghF | 選別 ... 合計 209 drwxr-xr-x 2 3 6 月 18 日 11:33 12.0.40.0/ drwxr-xr-x 2 3 7 月 28 日 15:00 13.0.9.1/ drwxr-xr-x 2 3 7 月 13 日 14:12 13.0.11.4/ drwxr-xr-x 2 3 7 月 26 日 15:30 13.0.11.5/ drwxr-xr-x 2 4 7 月 27 日 11:33 13.0.11.6/ drwxr-xr-x 2 3 8 月 3 日 11:41 13.0.11.7/ drwxr-xr-x 2 3 8 月 10 日 11:53 13.0.11.8/ drwxr-xr-x 2 3 8 月 17 日 17:00 13.0.11.9/ drwxr-xr-x 2 3 8 月 24 日 14:45 13.0.11.10/ drwxr-xr-x 2 3 8 月 3 日 14:37 13.0.17.0/ drwxr-xr-x 2 3 8 月 13 日 11:50 13.0.18.0/ drwxr-xr-x 2 3 8 月 17 日 11:21 13.0.19.0/
並べ替えでは、各行の日付部分をスキップしてから、「.」を使用して数値順に並べ替える必要があります (たとえば、12 または 13 から開始)。フィールド区切りとして。
私は2つのアプローチを考えましたが、サポートされている場合、 sort -k 構文に問題があります:
(1) 最初の 36 文字をスキップし、次に「.」を使用します。フィールド区切りとして、次の 4 つのフィールドで数値順に並べ替えます。
(2) フィールド セパレータを空白として、7 番目のフィールドにスキップし、フィールド セパレータを「.」に変更します。次の 4 つのフィールドで数値順に並べ替えます。
代替手段は小さな Perl スクリプトですが、Unix はこの「単純な」タスクを実行できないのでしょうか?