【问题标题】:modify bash ls command to sort by ending characters修改 bash ls 命令以按结束字符排序
【发布时间】:2017-02-10 03:50:42
【问题描述】:

我有一个包含很多日志文件的目录,例如 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 -t cmd 不能正确解决我的问题。

标签: python bash sorting ls listdir


【解决方案1】:

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

ls | rev | sort | rev 

另一种可能性是:

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

这将按正常顺序对每个 step 字段进行排序,但会将缺少 step2step3 的文件以不同的顺序放置,这可能是也可能不是您要查找的内容。

【讨论】:

    【解决方案2】:

    怎么样

    ls | rev | sort | rev
    

    ?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多