Voici un petit script Python qui peut faire ce que vous demandez
Utilisation de base :
python rename_files.py Pictures/
Il imprimera la sortie vers stdout
avant de renommer chaque fichier
Cette version pousse l'index jusqu'à ce qu'il soit constaté que le nom de fichier avec un tel index n'est pas pris. Bien que les noms de fichiers puissent commencer à un index différent lors d'itérations successives du script, les fichiers eux-mêmes restent inchangés.
import os
import sys
top_dir = os.path.abspath(sys.argv[1])
files = os.listdir( top_dir )
for index,item in enumerate(files):
if os.path.isdir( os.path.join(top_dir,item) ):
files.pop(index)
files.sort()
duplicates = []
last_index = None
for index,item in enumerate(files):
last_index = index
extension = ""
if '.' in item:
extension = '.' + item.split('.')[-1]
old_file = os.path.join(top_dir,item)
new_file = os.path.join(top_dir,str(index) + extension )
while os.path.isfile(new_file):
last_index += 1
new_file = os.path.join(top_dir,str(last_index) + extension )
print( old_file + ' renamed to ' + new_file )
os.rename(old_file,new_file)
Version alternative, résout le problème des noms de fichiers en double en ajoutant l'horodatage à chaque nom de fichier, puis en les énumérant. Cette solution peut prendre plus de temps, car le nombre de fichiers augmente, mais pour les répertoires qui se comptent en centaines, cela ne prendra pas beaucoup de temps.
import os
import sys
import time
top_dir = os.path.abspath(sys.argv[1])
files = os.listdir( top_dir )
for index,item in enumerate(files):
if os.path.isdir( os.path.join(top_dir,item) ):
files.pop(index)
files.sort()
timestamp = str(int(time.time()))
for item in files:
os.rename( os.path.join(top_dir,item) ,
os.path.join(top_dir, timestamp + item) )
files2 = os.listdir( top_dir )
for index,item in enumerate(files2):
if os.path.isdir( os.path.join(top_dir,item) ):
files2.pop(index)
for index,item in enumerate( files2 ):
last_index = index
extension = ""
if '.' in item:
extension = '.' + item.split('.')[-1]
old_file = os.path.join(top_dir,item)
new_file = os.path.join(top_dir,str(index) + extension )
while os.path.isfile(new_file):
last_index += 1
new_file = os.path.join(top_dir,str(last_index) + extension )
print( old_file + ' renamed to ' + new_file )
os.rename(old_file,new_file)