La maîtrise de la manipulation de fichiers est cruciale pour tout développeur, et Ruby offre des solutions élégantes pour renommer les fichiers efficacement. Ce guide explore diverses techniques, du renommage de fichiers uniques aux opérations par lots complexes sur plusieurs répertoires.
Table des matières
- Pourquoi renommer des fichiers par programme ?
- Renommer un seul fichier
- Renommer des fichiers dans le même répertoire
- Renommer des fichiers récursivement dans les sous-répertoires
- Renommer des fichiers par lots avec une logique personnalisée
- Gestion robuste des erreurs
Pourquoi renommer des fichiers par programme ?
Le renommage manuel de fichiers devient impraticable lorsqu’il s’agit de nombreux fichiers. L’automatisation offre plusieurs avantages :
- Efficacité : Traitez des centaines ou des milliers de fichiers rapidement et avec précision.
- Standardisation : Appliquez des conventions de nommage cohérentes pour une meilleure organisation.
- Contrôle de version : Ajoutez des horodatages ou des numéros de version pour suivre les itérations des fichiers.
- Intégration du flux de travail : Intégrez le renommage de fichiers en toute transparence dans les pipelines de traitement de données plus importants.
- Nettoyage des données : Corrigez les fautes de frappe, supprimez les caractères indésirables et améliorez la capacité de recherche.
Renommer un seul fichier
Le scénario le plus simple consiste à renommer un seul fichier. La méthode File.rename
de Ruby gère cela directement :
old_path = "/path/to/old_file.txt"
new_path = "/path/to/new_file.txt"
begin
File.rename(old_path, new_path)
puts "Fichier renommé avec succès !"
rescue Errno::ENOENT
puts "Erreur : Fichier '#{old_path}' introuvable."
rescue Errno::EEXIST
puts "Erreur : Le fichier '#{new_path}' existe déjà."
rescue => e
puts "Une erreur s'est produite : #{e.message}"
end
Renommer des fichiers dans le même répertoire
Pour renommer plusieurs fichiers dans le même répertoire, utilisez Dir.glob
pour sélectionner les fichiers correspondant à un motif :
directory = "/path/to/files"
pattern = "*.txt"
Dir.glob("#{directory}/#{pattern}") do |file|
new_filename = file.gsub(/.txt$/, "_modified.txt") #Exemple de logique de renommage
begin
File.rename(file, new_filename)
puts "Renommé : #{file} -> #{new_filename}"
rescue => e
puts "Erreur lors du renommage de #{file} : #{e.message}"
end
end
Renommer des fichiers récursivement dans les sous-répertoires
Pour renommer des fichiers dans les sous-répertoires, utilisez le caractère générique `**` avec `Dir.glob` :
directory = "/path/to/files"
pattern = "*.txt"
Dir.glob("#{directory}/**/#{pattern}") do |file|
new_filename = file.gsub(/.txt$/, "_modified.txt")
begin
File.rename(file, new_filename)
puts "Renommé : #{file} -> #{new_filename}"
rescue => e
puts "Erreur lors du renommage de #{file} : #{e.message}"
end
end
Renommer des fichiers par lots avec une logique personnalisée
Pour des scénarios plus complexes, utilisez un hachage pour mapper les anciens noms de fichiers aux nouveaux noms de fichiers :
directory = "/path/to/files"
renames = {
"file1.txt" => "new_file1.txt",
"file2.jpg" => "new_file2.jpg"
}
renames.each do |old_name, new_name|
old_path = File.join(directory, old_name)
new_path = File.join(directory, new_name)
begin
File.rename(old_path, new_path)
puts "Renommé : #{old_path} -> #{new_path}"
rescue => e
puts "Erreur lors du renommage de #{old_path} : #{e.message}"
end
end
Gestion robuste des erreurs
Incluez toujours une gestion complète des erreurs pour gérer correctement les problèmes tels que les fichiers introuvables ou les fichiers existants.