modif de nom de 1600 fichiers en chaine comment?

xplane

Membre junior
3 Novembre 2003
10
3
Bonjour tous , un petit probleme j'ai un fichier .chm que j'ai convenablement traduis avec tubby, mais lors que je lance le fichier recupéré en html avec safari, les images qui doivent apparaitre dans les pages sont remplacées par le petit carré bleu habituel. J'ai lu le code source d'une des pages et je me suis apperçu qe les images ont un suffixe de trop , et donc elles n'apparassent pas , si j'enlève ce suffixe cela fonctionne bien.
EX: "024fig01.jpg;400477" --- les chiffres "400477" sont en trop
la question : n'y a t il pas un moyen d'oter les 1680 suffixes des 1680 fichiers (peu être par le terminal) pour ne pas avoir a me les faire a la main (enfin , au clavier). Dans le dos pc on pouvait faire cela mais sur mac je ne sais pas si cela se peu.
Voila si un ou plusieurs specialistes pouvaient m'aider un peu ça serait très sympatique
Merci d'avoir lu, et peu être de votre réponse.
Michel
 

BooBoo

Membre confirmé
22 Février 2005
364
34
45
Gaillon (27)
tu peux le faire par le terminal:
tu créés un fichier avec ces lignes dans le répertoire des fichiers à modifier:
Bloc de code:
for file in `ls *jpg*`
do
  new=`echo $file | sed "s/;.*//g"`
  echo $file " > " $new
  mv $file $new
done

tu mets ce fichier en exécutable:
Bloc de code:
chmod +x {nom du fichier}
et tu l'exécutes:
Bloc de code:
./{nom du fichier}

PS: attention, avec mon script, il ne faut pas qu'il y ai d'espace dans le nom des fichiers !
 

BooBoo

Membre confirmé
22 Février 2005
364
34
45
Gaillon (27)
pour expliquer le script:
Bloc de code:
for file in `ls *jpg*`
pour chacun des fichier contenant jpg dans le nom
Bloc de code:
do
commence la boucle
Bloc de code:
  new=`echo $file | sed "s/;.*//g"`
sed est un programme qui permet (entre autre) de faire des recherche/remplacer par la commande "s". Ici, il s'agit de remplacer tout ce qui suit le ; (inclus) par une chaine vide. la recherche en expression réguliere (regex pour les intimes) est ";.*" Le "." etant un "joker" remplacant n'importe quel caractère et le * indiquant qui le code précédent peut être répété de 0 à l'infini. Le g final n'est pas necessaire dans notre cas. Il indique que le rechercher/remplacer ne doit pas s'arreter au premier remplacement.
Bloc de code:
  echo $file " > " $new
afficher sur la sortie du terminal l'ancien et le nouveau nom du fichier pour un controle
Bloc de code:
  mv $file $new
changement du nom du fichier
Bloc de code:
done
fin de la boucle.

pour plus d'info, voir les pages man de ls, echo, sed, bash (pour les boucles, variables, ...)
 

BooBoo

Membre confirmé
22 Février 2005
364
34
45
Gaillon (27)
averell a dit:
Et pour ceux qui sont allergiques au terminal, FileBuddy peut faire ça.

heuuu oui, mais 36 euros pour faire un changement de nom, c'est cher payé !
 

averell

Membre d’élite
Club MacG
30 Juillet 2005
1 283
86
66
Alcatraz
Ben... FileBuddy fait plus que cela.
Et mon intervention, c'était «pour ceux qui sont allergiques au terminal».
Donc, ça n'était pas une critique de ta solution, simple et élégante (et en plus commentée en détails :up: ), ni destiné spécifiquement à l'auteur de la question initiale, mais bien à ceux qui liraient l'enfilade et que le terminal rebute.
:zen:
 

BooBoo

Membre confirmé
22 Février 2005
364
34
45
Gaillon (27)
y a pas de soucis ;) :hein: :D
mais un petit lien vers FileBuddy aurait été encore mieux :zen: :rolleyes: :up: