英数字ファイル名でソート

英数字ファイル名でソート

find現在、ディレクトリ内のすべてのファイルを検索するコマンドの結果を並べ替えています。

find . -maxdepth 1 -type f -iname "*.flac" | sort

私が期待しているのは、次のリストです。

./Track 1.flac
./Track 2.flac
./Track 3.flac
...
./Track 9.flac
./Track 10.flac
./Track 11.flac

私が得るものは次のリストです。

./Track 10.flac
./Track 11.flac
./Track 1.flac
./Track 2.flac
./Track 3.flac
...
./Track 9.flac

sort数値が正しく評価されるように英数字を昇順に並べ替えるオプションはありますか?

ベストアンサー1

.IEにコマンドラインオプションを-n渡してみてください。-k2sort

find . -maxdepth 1 -type f -iname "*.flac" | sort -n -k2

ソートされていないファイル名を「data.txt」ファイルに入れて、次のコマンドを実行すると:

sort -k2 -n data.txt

私はこれを出力として取得します。

./Track 1.flac
./Track 2.flac
./Track 3.flac
./Track 9.flac
./Track 10.flac
./Track 11.flac

オプションの説明:

-n (numeric sort) compare according to string numerical value
-k2 means sort on the 2nd field (and to the end of the line), 
    you could just restrict it to the second field with -k2,2

これは尋ねなかったし、上でも使用していませんが、いつかは役に立つかもしれませんね。

-r reverse sort order 

マニュアルページ~のためsort

さまざまなフィールドに基づいたソートに関する私の関連記事をご覧ください。最初と2番目の列は変更せずに3番目の列に基づいてソート(Linux)ソートコマンドの詳細については、ここで説明します。

おすすめ記事