正しい数値順でファイル名をソートする方法

正しい数値順でファイル名をソートする方法

ファイル名の順序の問題を解決するには?

例えば、

ls

生成されたファイルは次のとおりです。

basename1
basename11
basename12
basename13
[omitted]
basename2
basename20
basename21
....
basename3

質問

11-19は2と3の前に解析されます。

答え1

以下を使用してソートできます。

ls basename* | sort -V

ソートのための-Vオプションは「バージョン」の略ですが、実際には「名前と番号」に基づいてソートします。これはユーザーが探しているようです。ソートのマニュアルページを参照してください。

-V --バージョンソート

 Sort by version name and number.  It behaves like a standard sort,
 except that each sequence of decimal digits is treated numerically
 as an index/version number

グヌls

ls -vリストはバージョン別にソートできます。

答え2

シェルを使用すると、オプションまたはglob修飾子を使用して数字zshでglobをソートできます。numericglobsortn

print -rC1 basename*(n)

lsglob拡張をコマンドに具体的に渡すと、ls独自の語彙アライメントが行われるので、対応するzsh

GNU実装を使用すると、そのオプションを使用してソートを無効にlsできます。-U

ls -ldU basename*(n)

関連情報