如何按文件名的一部分对文件进行排序?

MRK*_*RKR 11 ls sort file-management files

鉴于以下文件:

ABC38388.SC01.StatueGrade_MKP
ABC38388.SC02.Statue_GKP
DEF38389.SC03.Statue_HKP
XYZ38390.SC00.Statue_WKP
Run Code Online (Sandbox Code Playgroud)

我如何根据SC值列出它们,如下所示:

XYZ38390.SC00.Statue_WKP
ABC38388.SC01.StatueGrade_MKP
ABC38388.SC02.Statue_GKP
DEF38389.SC03.Statue_HKP
Run Code Online (Sandbox Code Playgroud)

ter*_*don 14

在这种特殊情况下,您的文件名不包含任何空格或其他奇怪字符,您可以使用ls它并通过管道传输sort

$ ls -d -- *.SC* | sort -t. -k2
XYZ38390.SC00.Statue_WKP
ABC38388.SC01.StatueGrade_MKP
ABC38388.SC02.Statue_GKP
DEF38389.SC03.Statue_HKP
Run Code Online (Sandbox Code Playgroud)

-t套字段分隔符和-k2告诉sort排序基于起始与所述2行的部分第二字段(使用-k2,2用于第二场)。

对于更复杂的情况,您可以打印每个文件名,后跟 NULL 字符 ( \0),然后sort使用其-z选项通过管道告诉GNU读取以 NULL 分隔的行,最后,使用tr将其更改\0\n

printf '%s\0' *SC* | sort -zt. -k2 | tr '\0' '\n'
Run Code Online (Sandbox Code Playgroud)