2009-09-26 8 views
4

Je travaille sur un certain nombre de scripts de construction que je voudrais dépendre uniquement de fonctionnalités standardisées. J'ai besoin de trier certains fichiers par version. Disons que les fichiers sont la barre-1. {0,2,3} bar-11. {0,2,3}.Manière portable d'obtenir l'indicateur ls -v (c'est-à-dire trier par version)?

Par défaut, ls me donne:

bar-1_0 
bar-11_0 
bar-11_2 
bar-11_3 
bar-1_2 
bar-1_3 

obtenir ce que je veux est facile à l'aide 'ls -v':

bar-1_0 
bar-1_2 
bar-1_3 
bar-11_0 
bar-11_2 
bar-11_3 

Le problème est que 'ls -v' is not standard. La norme sort semble également manquer de l'option que je veux, bien que je pourrais regarder les anciennes versions des spécifications.

Quelqu'un peut-il suggérer un moyen portable pour réaliser cet effet à court d'écrire ma propre routine de tri?

Merci, Rhys

+0

Où 'ls -v' est-il pris en charge pour le tri par 'version'? (GNU - ah, oui!) MacOS X a une option '-v', mais elle force l'impression non éditée de caractères non-graphiques. –

Répondre

3

sort -n -t- -k2 semble faire ce que vous voulez. -n vous donne un tri numérique (c'est-à-dire non alphabétique); -t- définit le séparateur de champ sur - et -k2 sélectionne le second champ, c'est-à-dire le numéro de version.

Mon sort, sur Ubuntu, fait même la partie avec le soulignement correctement, mais je ne suis pas sûr si c'est standard. Pour être sûr, vous pouvez trier par la version mineure d'abord, puis par version majeure.