根据中间部分对文件进行排序

Jam*_*mes 6 shell-script filenames sort

我在unix中有以下文件,我想根据文件名中的日期和时间对文件进行排序

ABC_XYZ。20170201223147 .txt
ABC_XYZ。20170201223146 .txt
ABC_XYZ。20170127223141 .txt
ABC_XYZ。20170125223139 .txt
ABC_XYZ。20170214223134 .txt

我期待以下作为输出

ABC_XYZ。20170125223139 .txt
ABC_XYZ。20170127223141 .txt
ABC_XYZ。20170201223146 .txt
ABC_XYZ。20170201223147 .txt
ABC_XYZ。20170214223134 .txt

我尝试使用sort -kand sort -n,也许我没有以正确的方式使用它们。

Mik*_*keD 3

如果当前文件夹中的所有文件都具有与描述相同的格式,您可以使用以下命令:

ls | sort -t . -k 2 
Run Code Online (Sandbox Code Playgroud)

-t开关将分隔符设置为 a。.
-k开关指示使用哪个键进行排序。

使用您提供的文件名格式,您不需要开关,-n因为每个文件名中的位数相同。如果情况并非总是如此,您-n也可以轻松添加开关:

ls | sort -n -t . -k 2 
Run Code Online (Sandbox Code Playgroud)

同样,如果文件名的每个部分的数字长度不同,您可能需要指定两个键以及将它们扩展多远:

ls | sort -n -t . -k 2,2 -k 3,3
Run Code Online (Sandbox Code Playgroud)