Sort files numerically in bash

bash, linux, ls, sorting

Solution

I would try following code. Works on my testing scenario:

ls -1 *\.flv | sort -n -k1.2

The `ls` lists flv files 1 on each line, `sort` takes first (and only one) word on each line starting on second character (start of the number). Sorts numerically

Problem

I need to sort .flv files numerically and i was able to do it with the following command: ``` ls *\.flv | sort --version-sort -f ``` but with many files(hundreds) it's not sorting correctly. ``` ls *\.flv | sort --version-sort -f | tail -n 20 e680.flv e681.flv e682.flv e683.flv e684.flv e685.flv e686.flv e687.flv e688.flv e689.flv e690.flv e691.flv e692.flv e693.flv e694.flv e695.flv **e696.flv** s572.flv s602.flv s654.flv ``` but the strange this is, if i'm ruining the command without `"*.flv"` it's working. i could use just ls but i have other file types in the folder. ``` ls | sort --version-sort -f | tail -n 20 e680.flv e681.flv e682.flv e683.flv e684.flv e685.flv e686.flv e687.flv e688.flv e689.flv e690.flv e691.flv e692.flv e693.flv e694.flv e695.flv e696.flv ``` what i've tried so far: ``` ls | sort --version-sort -f | grep "flv" ls *.flv | sort --version-sort -f ls *\.flv | sort --version-sort -f ls *.flv | sort -f ```

Original source