lsを使用してファイル名の一貫した順序を確保するために、どの命名規則を使用できますか?

lsを使用してファイル名の一貫した順序を確保するために、どの命名規則を使用できますか?

特別なオプションを必要とせず、常に一貫した順序でソートされるようにファイルセットの命名規則を作成しようとしていますが、これを達成するのに問題があります。

次のファイル名がある場合:A.jpg、、、、、オプションなしでコマンドラインから実行すると(マンページに「項目をアルファベット順に並べ替え」と表示されます)、次の順序が表示されますA1.jpgA-1.jpgA_1.jpgls

A-1.jpg, A_1.jpg, A1.jpg, A.jpg

「-」、「_」、および「1」はASCII値45、95、および49を持つため、これが実際にどのようにソートされるかはわかりません。また、「.」が含まれている場合はASCII値46なので、2番目の文字値は45、95、49、46になります。

拡張子がない場合(たとえば、、、AA1A-1次のシーケンスA_1が返されます。ls

A, A-1, A_1, A1

この場合、2番目の文字のASCII値はNULL、45、95、48です。返品順序がないようですが、拡張子と同じ順序も抜けています。

一方、GNOMEファイルマネージャでディレクトリを表示すると、次のコマンドが表示されます。

A.jpg, A1.jpg, A-1.jpg, A_1.jpg

これも私が得た出力ですls -v。マニュアルページには、「テキスト内の(バージョン)番号の自然な順序」と記載されています。この場合、最初に数字なしで並べ替えてから、純粋な数字で並べ替えてから、数字の前に接頭辞を付けたASCII順に並べ替えるようです。

lsアルファベット以外の文字があるときに実際にアイテムを「アルファベット順」に並べる方法を理解できれば、大きな助けになると思います。簡単なテストでは、予想されたASCII値の順序は明らかではなく、ドットと拡張が全体にどのように適合するかは明らかではありません。何してるのls? ? ?

更新:表示された順序でいくつかのファイル名を配置し、ls次の16進ASCII値を指定しました。

A       0x41
A-1     0x41 0x2D
A_1     0x41 0x5F
A1      0x41 0x31
A-1.jpg 0x41 0x2D 0x31 0x2E 0x6A 0x70 0x67
A_1.jpg 0x41 0x5F 0x31 0x2E 0x6A 0x70 0x67
A1.jpg  0x41 0x31 0x2E 0x6A 0x70 0x67
AB      0x41 0x42
AB.jpg  0x41 0x42 0x2E 0x6A 0x70 0x67
A.jpg   0x41 0x2E 0x6A 0x70 0x67

アップデート2:コメントに応じて、出力は次のようになりますtype -a ls

ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls

LC_COLLATEが設定されていません。

$ set | grep LC_COLLATE
$ echo $LC_COLLATE

$

ベストアンサー1

lsと可変長/区切りファイル名で指摘された不確実性を考慮すると、英数字のみを含む固定幅形式を使用するのが妥当である可能性があります。保持するファイルの数によっては、説明名と索引付けのための固定幅フィールドを含めることができます。

|名前フィールド(10桁、「x」拡張子)|インデックスフィールド(6桁、「0」拡張子)|ファイル拡張子(3桁)|

例えば

xxxsealion000001.jpg
xxxxxxxcat000001.jpg
xxxxxxxcat009000.jpg

カテゴリの相対的なサイズについてもっと知らなければ、それはうまくいくことはできませんが、上記の形式を調整してより多くのインデックススペースまたはより多くの説明スペースを確保することができます(または固定幅を長くして、より多くのインデックススペースまたはより多くの説明スペースの確保)。 )。長い単語の説明が最後に「0」で埋められるようにするには(「_」も私には効果がありましたが、私の答えの最初の部分と反対です)、長い単語が最初に「z」で埋められるようにする必要があります。

おすすめ記事