【发布时间】:2023-03-28 19:08:01
【问题描述】:
我在一个文件夹中有一堆文件,它们的命名结构看起来像这样:
FOOBAR_1A.8_Alice.pdf
FOOBAR_1A.9_Bob.pdf
FOOBAR_1B.10_Foo.pdf
FOOBAR_1B.11_Bar.pdf
FOOBAR_1B.12_Jack.pdf
FOOBAR_1B.1_Jill.pdf
FOOBAR_1B.2_John.pdf
FOOBAR_1B.3_Mary.pdf
为了实现上述排序顺序,我进行了第一次排序迭代,如下所示:
find . -type f -name "*.pdf" -print | cut -d'/' -f2 | sort
但是如您所见,10/11/12 打印在 1/2/3 之前。
我再次尝试通过管道重新排序:
find . -type f -name "*.pdf" -print | cut -d'/' -f2 | sort | sort -t '.' -k 2n
但是这会打乱之前的排序工作并打印如下所示的输出:
FOOBAR_1A.7_Alice.pdf
FOOBAR_1B.7_Bob.pdf
FOOBAR_2A.7_John.pdf
FOOBAR_2B.7_Mary.pdf
FOOBAR_2C.7_Foo.pdf
FOOBAR_1A.8_Bar.pdf
FOOBAR_1B.8_Jack.pdf
FOOBAR_2A.8_Jill.pdf
所以,总而言之,我想要的排序输出是:
-
FOOBAR_NA.N的第一个字符应按数字排序(即FOOBAR_1然后FOOBAR_2等) -
然后
FOOBAR_NA.N应按字母顺序按第二个字符排序(即FOOBAR_1A然后FOOBAR_1B等) -
FOOBAR_NA.N最后应该按第一个点之后的数字排序(即FOOBAR_1A.1然后FOOBAR_1A.2等)
【问题讨论】: