/ / modifica il comando bash ls per ordinare terminando i caratteri: python, bash, sorting, ls, listdir

modificare il comando bash ls per ordinare terminando i caratteri: python, bash, sorting, ls, listdir

Ho una directory con un sacco di file di registro come sample_step1[_step2[_step3]].log

per verificare la conformità di ogni passaggio che corro python ls_end.py, che è

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))

c'è qualche alternativa in bash per ordinare i file nella directory dal finale?

risposte:

2 per risposta № 1

Sembra un metodo di ordinamento molto poco ortodosso, ma potresti farlo abbastanza facilmente in bash se hai il util-linux pacchetto installato, che include il rev utilità:

ls | rev | sort | rev

Un'altra possibilità, che è un tipo leggermente più convenzionale, sarebbe:

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

Questo ordinerà ciascuno step campo in ordine normale, ma posizionerà i file mancanti step2 e step3 in un ordine diverso, che può o non può essere quello che stai cercando.


1 per risposta № 2

Che ne dite di

ls | rev | sort | rev

?