Communauté francophone des utilisateurs d'Ubuntu
Les Ubuntu-partys sont l'occasion pour beaucoup d'entre vous d'acquérir les goodies Ubuntu-fr faits par nos petites mains avec amour.
Pour tous les autres, fini le désespoir de les manquer
Il est désormais possible de vous procurer l'objet de votre choix grâce à la boutique en ligne, commune à Framasoft et Ubuntu-fr. Vous pourrez déjà y trouver mugs, t-shirts et, bien sûr, les Framakey Ubuntu-fr Remix.
1
Bonjour,
je chercher à faire un ptit script, et je bute sur un problème.
Supposons que j'ai les fichiers suivants (créés par par exemple
for i in `seq 1 1 20`; do touch mon_fichier${i}_du_texte_different_.ext; done)
mon_fichier10_du_texte_different.ext ... mon_fichier19_du_texte_different.ext mon_fichier1_du_texte_different.ext mon_fichier20_du_texte_different.ext mon_fichier2_du_texte_.different.ext ... mon_fichier9_du_texte_.ext
(je sais que l'on peut faire un `seq -f%02g 1 1 20` par exemple, mais je n'ai pas le contrôle de leur création)
Bref, que je fasse un sort -n, sort -g je n'arrive pas à les trier correctement.
Y a-t-il moyen de faire ça sans les renommer ? (ce qui risque d'être délicat, le "texte different" pouvant avoir des chiffres dedans...)
Dernière modification par sensini (Le 16/12/2008, à 10:00)
Hors ligne
Et en triant sur la date de modification ? (si les fichiers n'ont pas réelement été créer comme ta commande, car il n'y a pas assez d'ecart dans le temps pour trier sur la date dans ce cas là.)
Y a-t-il moyen de faire ça sans les renommer ? (ce qui risque d'être délicat, le "texte different" pouvant avoir des chiffres dedans...
Pour renommer, si le début du nom jusqu'au chiffre est tjrs identique, ca devrait pas etre trop dur !
Hors ligne
Bonsoir,
Postulat :
Le début de tes noms de fichiers ne contient aucun numérique ou si c'est le cas, il est identique à tous les fichiers et n'est pas suivi d'un underscore (d'ailleurs, si ce n'était pas le cas, ta question n'aurait aucune raison d'être) :
ls -1 mon_fichier*|grep -o "[0-9]\+_"|sort -n|xargs -I{} echo ls mon_fichier{}*|bashEDIT : Le ls directement avec xargs ne fonctionne pas car le * est considéré comme caractère à par entière du nom de fichier. C'est pourquoi il faut "ruser" et envoyer la commande à bash (ou autre, tu peux changer à ta guise)
Si je m'exprime mal, voilà ce qui ne fonctionne pas (alors que c'est un peut l'intérêt de xargs)
ls -1 mon_fichier*|grep -o "[0-9]\+_"|sort -n|xargs -I{} ls mon_fichier{}*Dernière modification par Totor (Le 15/12/2008, à 20:57)
En ligne
Totor a écrit:
EDIT : Le ls directement avec xargs ne fonctionne pas car le * est considéré comme caractère à par entière du nom de fichier. C'est pourquoi il faut "ruser" et envoyer la commande à bash (ou autre, tu peux changer à ta guise)
Si je m'exprime mal, voilà ce qui ne fonctionne pas (alors que c'est un peut l'intérêt de xargs)Code:
ls -1 mon_fichier*|grep -o "[0-9]\+_"|sort -n|xargs -I{} ls mon_fichier{}*
En fait, avec une légère modif, ça fonctionne :
ls -1 mon_fichier*|grep -o "[0-9]\+_.*"|sort -n|xargs -I{} ls mon_fichier{}voilà ![]()
En ligne
Bonsoir
Avec cet exemple précis, on pourrait faire :
ls | sort -n -k 2 -t r
ou en plus compressé : sort -nk2 -tr
Hors ligne
merci à tous pour vos réponses ![]()
Hors ligne
J'ai finalement retenu la solution d'Alain.g, mais un grand merci à Totor pour m'avoir fait découvrir l'option -I de xargs!
Voilà ce que ça donne : Renommer des sous-titres pour mplayer ![]()
Hors ligne
1