OVH Cloud OVH Cloud

Trier des fichiers

2 réponses
Avatar
Hugolino
Bonjour

Je fais tourner un script (bash) sur les fichiers d'un répertoire.
Pour l'instant la boucle est initialisée par
find . -maxdepth 1 -type f | sed 's,^\./,,' | while read file
Donc les fichiers sont traités par ordre alphabétique.

Mais je voudrais que ces fichiers soient triés suivant le nombre
éventuellement contenu dans leurs noms.

la liste...
2_zaffreux_jojos_1102.jpg
Concert_Mael_1054.jpg
Concert_Mael_1059.jpg
Concert_Mael_1067.jpg
Concert_Mael_Lucille_1055.jpg
Concert_Mael_Lucille_Hugo_1061.jpg
Hugo_Mael_1222.jpg
Hugues_Portrait_1159.jpg
LaP_Delphine_1176.jpg
LaP_HTD_1174.jpg

...doit être triée comme ceci:
Concert_Mael_1054.jpg
Concert_Mael_Lucille_1055.jpg
Concert_Mael_1059.jpg
Concert_Mael_Lucille_Hugo_1061.jpg
Concert_Mael_1067.jpg
2_zaffreux_jojos_1102.jpg
Hugues_Portrait_1159.jpg
LaP_HTD_1174.jpg
LaP_Delphine_1176.jpg
Hugo_Mael_1222.jpg

(Le nom d'un fichier ne contient jamais d'espace, mais le nombre de
séparateurs "_" n'est pas constant et il peut ne pas y en avoir, s'il y
a plusieurs nombres, c'est le dernier qui doit servir d'index)

Je sens que je pourrais le faire sans la puissance des outils Unix
(Gnu/Linux), mais je sens surtout que ça ne va pas être propre ;)

Bref, j'ai besoin d'un petit coup de main, comment faire ?

Merci de votre aide


--
> je voudrais un score-file d'enfer qui me marque comme lus tous les
> posts contenant le mot winmodem
# su news -c 'ctlinnd rmgroup fr.comp.os.linux.configuration'
-+- EJ in Guide du linuxien pervers - Bien configurer son scorefile -+-

2 réponses

Avatar
Joseph Balsamo
Mais je voudrais que ces fichiers soient triés suivant le nombre
éventuellement contenu dans leurs noms.


Accroche-toi...
find . -maxdepth 1 -type f | sed
's,(./)(.*[^0-9])([0-9]+)([^0-9]*)$,3 234,' | sort -n | awk
'{print $2}'

Avatar
Hugolino
Le Sat, 25 Feb 2006 02:29:55 +0100, Joseph Balsamo a écrit:
Mais je voudrais que ces fichiers soient triés suivant le nombre
éventuellement contenu dans leurs noms.


Accroche-toi...


... au script je retire le shell.

find . -maxdepth 1 -type f | sed
's,(./)(.*[^0-9])([0-9]+)([^0-9]*)$,3 234,' | sort -n | awk
'{print $2}'


Merci, ça marche...

Et puis ça va me faire encore de la lecture pour comprendre comment le sed
marche ;-)



--
Mais c'est une manie !
Je vous prierai de la mettre en veilleuse. Ma réponse était polie et j'y

ai passé du temps malgrès votre attitude arrogante tout au long de ce fil.
-+- JCD in Guide du linuxien pervers - "Les modéros perdent patience" -+-