Ben c'est pas les solutions qui manque :)
Je me suis amusé un peu, je n'en trouve aucune des deux vraiment esthetique, mais bon.
Solution 1:
ls -l | awk '{ if($8~/[0-9][0-9]:[0-9][0-9]/) {print $7" "$6" 2004"} \
else {print $7" "$6" "$8} }'
Si une chaine du type
[0-9][0-9]:[0-9][0-9] (deux chiffres, deux points, deux chiffre) apparait dans le champ 8, etc.c'est trés lourd, on fait un test qui affiche soit une chaine soit une autre. sans compter que l'expression réguliere est vraiment pas au top.
Solution 2:
ls -l | awk --re-interval 'BEGIN{ORS=" "} { print $7" "$6} \
{ if($8~/[[:digit:]]{2}:[[:digit:]]{2}/) {print 2004} else {print $8} } \
{ print "\n" }'
Cette derniere parait plus logique puisque dans tout es cas, on affiche les deux champ interressants, et ensuite on vois s'il on affiche le champ 8, ou la date directement.
Ceci dit, pour que l'expression reguliere soit propre, on est obligé de spécifier l'option
--posix ou --re-interval.
Du fait de awk, chaque print est séparé par un séparateur de champ initialisé a \n (newline), ce qui nous oblige à écraser la variable ORS (Output Record separator) pour separer les print par un espace sans ça, la mise en forme bat de l'aile.
Ceci nous force a rajouter un retour chariot a la fin de chaque ligne traitée ({ print "\n" }) d'ailleur, en tout logique, la variable ORS devrait etre remise à "\n" puis à espace puis à "\n" puis etc.
Je rajoute que dans les deux cas, il faut traiter la sortie du ls avant de la passer par awk (ou au debut de celui-ci) pour ne pas tenir compte de la ligne total qui peut apparaitre.
Il faut retoucher le script chaque année (et oui, dans moins de 4 mois, ça sera 2005 et non 2004) ou utiliser la commande date au depart pour fixer cette année dans une variable.
Voilà, y'a surment bien d'autres solutions avec awk, sans doute des plus élégantes, mais je doute qu'il puisse y en avoir une suffisament legere pour ce traitement là ;)
awk est exessivement puissant, mais il faut quand même l'utiliser a bon escient. Là en l'occurence, la commande stat est faite pour ça, a tel point que je me demande si stat n'est pas appellée lors d'un bete ls :o)
@++
...Mana mana
Tutudutu...