关于linux:以bash数字排序文件

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

但是奇怪的是,如果我在不使用"*.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

ls在每行上列出flv文件1,sort在每行上的第一个(也只有一个)单词从第二个字符(数字的开头)开始。 按数字排序


给定一个文件夹,其中包含从1.flv9999.flv的顺序命名的文件

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

为简便起见,可以将上面的两个标志作为-v1组合在一起。


要对第一个字符进行数字排序,请尝试以下操作:

1
sort -k1.2n