奇妙な基本的なソート動作

奇妙な基本的なソート動作

ここで何が起こっているのか理解するのが難しいです。

[guido@localhost 9]$ ls -1 Star\ Wars\ Episode\ *
Star Wars Episode II Attack of the Clones.avi
Star Wars Episode III Revenge of the Sith.avi
Star Wars Episode I The Phantom Menace.avi
Star Wars Episode IV A New Hope.avi
Star Wars Episode VI Return of the Jedi.avi
Star Wars Episode V The Empire Strikes Back.avi

III\b以前はI\b、しかしII\b以前はIII\b?原因が何であれ、その動作は一貫していません。これは、GUIから得られたソート結果と同じです。すべてのスペースが実際にスペースであり、ファイル名の間に大文字と小文字の違いがないことを確認しました。どうやって?ローマ数字をスキップして並べ替えたいですか?

その他のテスト:

[guido@localhost 9]$ find -name "Star Wars *" -print
./Star Wars Episode I The Phantom Menace.avi
./Star Wars Episode II Attack of the Clones.avi
./Star Wars Episode III Revenge of the Sith.avi
./Star Wars Episode IV A New Hope.avi
./Star Wars Episode V The Empire Strikes Back.avi
./Star Wars Episode VI Return of the Jedi.avi

しかし:

[guido@localhost 9]$ find -name "Star Wars *" -print | sort
./Star Wars Episode II Attack of the Clones.avi
./Star Wars Episode III Revenge of the Sith.avi
./Star Wars Episode I The Phantom Menace.avi
./Star Wars Episode IV A New Hope.avi
./Star Wars Episode VI Return of the Jedi.avi
./Star Wars Episode V The Empire Strikes Back.avi

しかし:

[guido@localhost 9]$ find -name "Star Wars *" -print | sort -f
./Star Wars Episode I The Phantom Menace.avi
./Star Wars Episode II Attack of the Clones.avi
./Star Wars Episode III Revenge of the Sith.avi
./Star Wars Episode IV A New Hope.avi
./Star Wars Episode V The Empire Strikes Back.avi
./Star Wars Episode VI Return of the Jedi.avi

ドキュメントが示すように、私のロケールがこれに影響を与える可能性があるとは思いません(とにかくen_US.utf8に設定しました)。私は何を見逃していますか?

[guido@localhost 9]$ sort --version
sort (GNU coreutils) 8.22

答え1

ロケールに従って並べ替えると、スペース(および大文字と小文字を指定できます)は無視されます。したがって、共通プレフィックス「Star Wars Episode」の後に次のようなソートを実行できます。

  • 国際投資協会
  • サム、
  • 情報技術研究所

find結果は、正確に「予想」の順序であるディレクトリの順序で返されます。

これに基づいて、「既存の」ソートに戻ることができます。マニュアルページ:

デフォルトのバイト値を使用して既存のソート順序を取得するには、LC_ALL = Cを設定します。

関連情報