修改 bash ls 命令以按结束字符排序

modify bash ls command to sort by ending characters

我有一个包含很多日志文件的目录,例如 sample_step1[_step2[_step3]].log

检查我每个步骤的完成度运行python ls_end.py,即

from os import listdir
from os.path import getsize, isfile

def end_sort(s): return s[::-1]


files = [i for i in listdir('.') if isfile(i) and not i.startswith('.')]
for i in sorted(files, key=end_sort):
    print("{:10.2f}\t{}".format(getsize(i)/1024, i))

在 bash 中是否有其他方法可以从结尾对目录中的文件进行排序?

怎么样

ls | rev | sort | rev

?

这似乎是一种非常不正统的排序方法,但如果您安装了 util-linux 软件包,您可以在 bash 中轻松完成此操作,其中包括 rev 实用程序:

ls | rev | sort | rev 

另一种可能性,这是一种稍微更传统的排序,是:

ls | sort -t_ -k4 -k3,3 -k2,2

这将按正常顺序对每个 step 字段进行排序,但会以不同的顺序放置缺少 step2step3 的文件,这可能与您的顺序不同正在寻找。