マルチレベル数値パスの並べ替え

マルチレベル数値パスの並べ替え

私はUbuntu 22を使用しており、別の場所に数値を含む迷惑な名前の大きなファイルツリーがあります。それは次のとおりです。

./2
./2/9
./2/10
./2/8
./1
./1/2
./1/1
./1/11
./11
./11/page 6
./11/page 05
./11/page 4

「ページ」のようなものを無視し、数値に基づいてソートして次のようにします。

./1/1
./1/2
./1/11
./2/8
./2/9
./2/10
./11/page 4
./11/page 05
./11/page 6

私はこれを試しましたが、sort -n最初のレベルのディレクトリ名だけを見ても、期待どおりに機能しないようです。

$ find . -mindepth 1 -type d | sort -n
./1
./11
./2

「(数値の代わりに)各整数で並べ替える」の便利なオプションはありますか?

答え1

sort -V少なくとも例の単純さを考えると、これが欲しいと思います。

$ sort -V << EOF
./2
./2/9
./2/10
./2/8
./1
./1/2
./1/1
./1/11
./11
./11/page 6
./11/page 05
./11/page 4
EOF
./1
./1/1
./1/2
./1/11
./2
./2/8
./2/9
./2/10
./11
./11/page 4
./11/page 05
./11/page 6

1つの既知の注意:これは、文字列の「ページ」などのテキストを「無視」せずにソート順にのみ含まれます。 「行」と同じ番号を持つ他の項目がある場合、「行」項目は「ページ」項目の前にソートされます。

しかし、通常、この方法がうまくいかない場合編集する投稿を更新し、正しく解決されていないケースを表示するようにケースを更新してください。

答え2

zshとその使用グローバル予選

  • NNULL_GLOBオプションの設定
  • .純粋なファイルのみを選択してください(たとえば、ディレクトリ、シンボリックリンク、fifo、デバイスの省略...)
  • nNUMERIC_GLOB_SORTオプションをオンにしてください

だから

% print -rC1 -- **/*(N.n)
1/1
1/2
1/11
2/8
2/9
2/10
11/page 4
11/page 05
11/page 6

関連情報