dimanche 14 septembre 2008

Ruby : Renommer un ensemble de fichiers

Logo Ruby Juste un petit code pour renommer un ensemble de fichiers. Sous Unix, un petit shell serait sans doute suffisant, mais étant sous Windows à la maison et n'aimant pas des masses le Batch, voici ce que ça pourrait donner... Dans cet exemple, on associe à d le répertoire dans lequel on souhaite renommer les fichiers dont le nom commence par "PICTURE_" (sortie d'appareil photo dans mon cas) en "starpics_000X" avec X s'incrémentant.


d = Dir.new("C:/Documents and Settings/utilisateur/Photos/Star")
Dir.chdir("C:/Documents and Settings/utilisateur/Photos/Star")
i = 1
d.each do |file|
if file.to_s[0..7] == "PICTURE_" then
File.rename(file.to_s, "starpics_000#{i}.jpg")
i += 1
end
end
Rien de bien méchant dans ce court code. Quelques remarques cependant : on remarque que même sous Windows, les séparateurs dans le chemin du répertoire est un slash et non pas un anti-slash... Il me semblait qu'il y avait une méthode de base pour faire cette conversion un peu pénible mais je ne l'ai pas retrouvée... Une chose un peu pénible avec cette partie du core de Ruby, sur les fichiers et répertoires, c'est que c'est assez peu homogène : ici, on itère sur les fichiers grâce à la méthode d'instance each de la classe Dir (Directory), on change le répertoire courant grâce à la méthode de classe chdir, mais la méthode de renommage de fichier est une méthode de classe ! Pourquoi pas une méthode d'instance sur sa cible ?

Au passage, il est possible de renommer plusieurs fichiers en même temps sous Windows via l'explorateur : les sélectionner puis faire F2. On en renomme un, les autres prennent le même nom, suivi de " (X)" avec X s'incrémentant. La beauté de Windows ? Des anti-slashs dans les chemins et surtout de superbes espaces et parenthèses dans les noms de fichiers...

Un bon tutoriel sur Ruby pour la partie "Manipulation de fichiers", par JB Naigeon (:fr).
Blogged with the Flock Browser

2 commentaires:

Lefty a dit…

je te crois sur parole!

promis, je vais même essayer d'ouvrir les fichiers Ruby que tu m'as envoyés dans le terminal.

faut juste que j'aille à l'aéroport.

(ôôhh le troll)

Sobe a dit…

Et voici et voilà le proto-type du mec cool sous MacOS incapable de trouver un éditeur de texte sur sa bécane alors qu'il a au moins Vi (super pour débuter)...

Chuis sûr que t'as même pas réussi à ouvrir les sources que je t'ai envoyées n0oB ! ^^

Si c'est pas malheureux de voir des mecs sous Unix qui n'utilise pas la console... (Quoi !?)