13

我需要对 .flv 文件进行数字排序,并且可以使用以下命令进行排序:

ls *\.flv | sort --version-sort -f

但是有很多文件(数百个),它的排序不正确。

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 但我在文件夹中有其他文件类型。

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

到目前为止我已经尝试过:

    ls | sort --version-sort -f | grep "flv"
    ls *.flv | sort --version-sort -f
    ls *\.flv | sort --version-sort -f
    ls *.flv | sort -f
4

3 回答 3

22

我会尝试以下代码。适用于我的测试场景:

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

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

于 2012-11-13T12:58:23.563 回答
12

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

ls -v1 *.flv

将输出:

1.flv
2.flv
...
10.flv
...
90.flv
...
100.flv
101.flv
...
9999.flv

手册页

    -v     natural sort of (version) numbers within text
    -1     list one file per line

为简洁起见,上面的两个标志可以合并为-v1.

于 2017-12-02T13:16:19.897 回答
5

要在第一个字符后按数字排序,试试这个:

sort -k1.2n
于 2012-11-13T12:59:53.990 回答