Windowsのソート順序は私の心の中に根ざしています。残念ながら、Windowsはこれを簡単に変更する方法を提供していません。
Unixツールを使用してこのソート順序をシミュレートする方法はありますか?
それぞれはファイル名の例です。
{"Ie4 01", "Ie4!01", "Ie4_01", "Ie4_128", "Ie5", "Ie6", "Ie401sp2","Ie501sp2"}
正しいソート順序
Ie4 01
Ie4!01
Ie4_01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2
答え1
Windowsのようにフォルダとファイルを分離したい場合は、次のことができます。
ls -d */ -1 | sort -V
ls -p | grep -v / | sort -V
答え2
GNU sort の sort( -V
) バージョンは、次のような出力を提供するようです。
~ printf "%s\n" "Ie5" "Ie6" "Ie4 01" 'Ie4!01' "Ie4_01" "Ie4_128" "Ie401sp2" "Ie501sp2" |
sort -V
Ie4 01
Ie4!01
Ie4_01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2
答え3
特殊文字の順序を特に気にしない場合は、zsh
数値ソートglob修飾子が似ています。
設定
$ touch "Ie5" "Ie6" "Ie4 01" 'Ie4!01' "Ie4_01" "Ie4_128" "Ie401sp2" "Ie501sp2"
$ mkdir Foo Quux Ie7bar
zshのみ
$ print -l *(n/) *(n^/)
Foo
Ie7bar
Quux
Ie4 01
Ie4_01
Ie4!01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2
LSと共に
$ ls -1df *(n/) *(n^/)
Foo
Ie7bar
Quux
Ie4 01
Ie4_01
Ie4!01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2
フラグはls
次のとおりです
- 単一熱出力強制(
-1
) - ビューの便宜のためのものです。 -d
ディレクトリ()を入力しないでください。- 受信リストを並べ替えない(
-f
または-U
)
zsh glob修飾子は次のことを意味します。
*(n/)
- ディレクトリリストに展開/
、数値順に並べ替え*(n^/)
- プロジェクトリストに展開いいえ^
数値順に並べられたディレクトリ
ファイル名を引用したりnullで区切ったりすることを心配することなく、結果をより簡単に操作できるため、zshソリューションについて言及します。たとえば、
$ mine=( *(/n) *(n^/) )
$ for file in "${mine[@]}"; do print -l "$file"; done
Foo
Ie7bar
Quux
Ie4 01
Ie4_01
Ie4!01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2
$ print -l "${mine[-1]}"
Ie501sp2