Tri par date

17

Original:

23 janv 2011 10:42 QUELQUE CHOSE 2007.12.20.avi
26 juin 2009 QUELQUE CHOSE 2009.06.25.avi
12 févr. 2010 QUELQUE CHOSE 2010.02.11.avi
29 janv 2011 09:17 QUELQUE CHOSE 2011.01.27.avi
11 févr.2011 20:06 QUELQUE CHOSE 2011.02.10.avi
27 févr.2011 23:05 QUELQUE CHOSE 2011.02.24.avi

Production:

27 févr.2011 23:05 QUELQUE CHOSE 2011.02.24.avi
11 févr.2011 20:06 QUELQUE CHOSE 2011.02.10.avi
29 janv 2011 09:17 QUELQUE CHOSE 2011.01.27.avi
23 janv 2011 10:42 QUELQUE CHOSE 2007.12.20.avi
12 févr. 2010 QUELQUE CHOSE 2010.02.11.avi
26 juin 2009 QUELQUE CHOSE 2009.06.25.avi

J'ai généré la liste ci-dessus (originale) 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 puis-je obtenir la sortie où le fichier le plus récent est en haut?

LanceBaynes
la source
2
@ user4724: comment avez-vous généré la liste?
@ user4724: Cela ne génère pas pour moi le même type de sortie que vous avez - peu importe que Gilles a la réponse

Réponses:

21

Sur la plupart des unités, ls a une -toption. Depuis la manpage de ma boîte Debian:

-t tri par heure de modification

Essayez la commande suivante:

$ ls -lt

Alexander Pogrebnyak
la source
j'en
+ ls -lt affichera un répertoire complet, si 1 fichier y change.
LanceBaynes
14

Est-ce un fichier texte que vous essayez de trier, ou essayez-vous d'afficher une liste de répertoires par date? Pour ce dernier, utilisez le -tdrapeau pourls . Pour les premiers, voir en particulier le -Mdrapeau à trier GNU, qui trie par abréviations de nom de mois à trois lettres. La commande suivante trie par les 3e, 1re, 2e et 4e colonnes, en traitant la deuxième clé de tri comme un nom de mois.

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

Envisagez toujours d'utiliser des dates de style japonais / ISO, toujours dans l'ordre AAAA-MM-JJ-HH-MM-SS (c'est-à-dire la plus importante en premier, largeur de colonne constante). De cette façon, le tri par date est identique à un tri lexicographique.

Gilles 'SO- arrête d'être méchant'
la source
N'oubliez pas les zéros en tête de cette suggestion de format de date. C'est le format que j'utilise chaque fois que je formate la chaîne moi-même.
stolenmoment
@stolenmoment Vous pouvez utiliser des espaces au lieu de zéros si cela ne vous dérange pas, le point important est une colonne constante avec. 2018  5 26fonctionne aussi bien que 2018 05 26(tant que vous ne passez pas par un balisage qui fusionne des espaces consécutifs…), ce qui ne fonctionne pas bien, c'est 2018 5 26.
Gilles 'SO- arrête d'être méchant'
Oui, j'évite par réflexe les espaces dans les noms de fichiers, je suis sûr que vous pouvez deviner pourquoi.
stolenmoment
3

Je ne sais pas si la fonctionnalité était dans le ls commande lorsque la question d'origine 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 en bas; ou si vous utilisez:

ls -tr --full-time

alors il inversera l'ordre.

Bevan Thomas
la source
La question est de savoir comment trier le fichier par date / heure de modification. L' -toption répond complètement à cette question; --full-timen'est pas vraiment pertinent.
G-Man dit `` Réintègre Monica '' le
La seule option -t ne vous donne pas l'année pour les fichiers modifiés dans les six mois alors que --full-time vous donne exactement cela. Vous pouvez également utiliser le style d'heure pour formater un format de date à votre convenance. par exemple ls -ltr - time-style +% Y-% m-% d \% H:% M:% S
Bevan Thomas
Je ne sais pas quel est votre point.  ls -tne vous donne pas non plus le mode et le propriétaire des fichiers, le nom d'hôte et la version du système d'exploitation, ni le prix du thé en Chine.  ls -tn'affiche même pas du tout la date de modification. Mais la question n'est pas d'afficher les informations sur les fichiers, mais de trier les fichiers par date de modification. Vous ne contribuez pas à la réponse à la question; vous ajoutez des informations supplémentaires intéressantes. Lorsque vous obtenez 50 points de réputation , vous pouvez publier ce type d'informations sous forme de commentaire .
G-Man dit `` Réintègre Monica '' le
-3

récursif ( R) et pause ( |more)

ls -ltR |more
Henrique
la source