Sort files numerically in bash
我需要对.flv文件进行数字排序,并且能够使用以下命令执行此操作:
1 | ls *\\.flv | sort --version-sort -f |
但是有很多文件(数百个),因此无法正确排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 |
但是奇怪的是,如果我在不使用
我可以只使用ls,但文件夹中还有其他文件类型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 |
到目前为止我尝试过的是:
1 2 3 4 | ls | sort --version-sort -f | grep"flv" ls *.flv | sort --version-sort -f ls *\\.flv | sort --version-sort -f ls *.flv | sort -f |
我会尝试以下代码。 适用于我的测试场景:
1 | ls -1 *\\.flv | sort -n -k1.2 |
给定一个文件夹,其中包含从
1 | ls -v1 *.flv |
将输出:
1 2 3 4 5 6 7 8 9 10 11 | 1.flv 2.flv ... 10.flv ... 90.flv ... 100.flv 101.flv ... 9999.flv |
从手册页:
1 2 | -v natural sort of (version) numbers within text -1 list one file per line |
为简便起见,可以将上面的两个标志作为
要对第一个字符进行数字排序,请尝试以下操作:
1 | sort -k1.2n |