web-dev-qa-db-fra.com

Tri par date

Original:

[... 29 janvier 2011 09:17 Quelque chose 2011.01.27.avi 
 11 févr. 2011 20:06 quelque chose 2011.02.10.avi 
 Février 23 23:05 Quelque chose 2011.02.24.avi 

Sortir:

 27 février 2011 23:05 quelque chose 2011.02.24.avi 
 11 févr. 2011 20:06 quelque chose 2011.02.10.avi 
 Jan 29 2011 09:17 Quelque chose 2011.01.27. AVI 
 23 janvier 2011 10:42 Quelque chose 2007.12.20.avi 
 12 février 2010 JOIN 2010.02.11.avi 
 Jun 26 2009.06.25.avi 

J'ai généré la liste ci-dessus (original) avec:

ls -A -lR | grep "^-" | sed "s/.\{43\}/&\n/" | grep -v "^-" | while read ONELINE; do if echo $ONELINE | cut -d " " -f3 | grep -o '[0-9][0-9]:[0-9][0-9]' > /dev/null 2>&1; then echo $ONELINE | sed "s/.\{7\}/&$(date +%Y) /"; else echo $ONELINE; fi; done

Comment pourrais-je obtenir la sortie où le dernier fichier est en haut?

17
LanceBaynes

Est-ce un fichier texte que vous essayez de trier ou essayez-vous de visualiser une liste de répertoires par date? Pour ce dernier, tilisez le -t Drapeau à ls . Pour le premier, voir en particulier le -M drapeau à GNU Trier, qui trie par des abréviations de noms de trois lettres. La commande suivante trie par les 3ème, la 1ère, la 2ème et la 4ème colonnes, traitant la deuxième clé de tri en tant que nom .

sort -k 3 -k 1M -k2 -k4 in.txt

Envisagez toujours d'utiliser des dates de style japonais/iso, toujours dans la commande AAAA-MM-DD-HH-MM-SS (c'est-à-dire la première largeur de colonne constante, la plus constante). De cette façon, le tri par date est identique à un type lexicographique.

Je ne sais pas si la fonctionnalité était dans la commande ls lorsque la question initiale a été posée, mais vous pouvez maintenant utiliser l'option --full-time.

par exemple.,

ls -t --full-time 

triera avec le temps le plus ancien au bas; ou si vous utilisez:

ls -tr --full-time

ensuite, il va inverser la commande.

3
Bevan Thomas