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
渡してみてください。-k2
sort
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)ソートコマンドの詳細については、ここで説明します。
答え2
zsh では、次を使用します。n
ワイルドカード修飾子:
print -l *.flag(n)