設定

設定

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

関連情報