Script Python pour corriger les extensions de fichiers mv --backup=numbered
Après avoir utilisé mv --backup=numbered, vous vous retrouverez avec beaucoup de fichiers portant des noms tels que
mv_backup_before.txt
001.jpg.~1~
001.jpg.~2~
001.jpg.~3~etc.
Le script Python suivant renomme ces fichiers en
mv_backup_after.txt
001.1.jpg
001.2.jpg
001.3.jpgen préservant l’extension de fichier d’origine.
fix_mv_backup_numbered.py
#!/usr/bin/env python3
import os
import re
import argparse
def rename_backup_files(directory, recursive=False):
# Expression régulière pour correspondre aux fichiers comme "161.jpg.~2~"
pattern = re.compile(r"^(.*)\.\~(\d+)\~$")
# Obtenir tous les fichiers du répertoire courant
for item in os.listdir(directory):
item_path = os.path.join(directory, item)
# Si recursive est True et que l'élément est un répertoire, le traiter
if recursive and os.path.isdir(item_path):
rename_backup_files(item_path, recursive)
continue
match = pattern.match(item)
if match:
base_name = match.group(1) # par ex., "161.jpg"
number = int(match.group(2)) # par ex., 2
# Extraire le nom de fichier de base et l'extension
name, ext = os.path.splitext(base_name)
# Créer le nouveau nom de fichier
new_filename = f"{name}.{number}{ext}"
# Incrémenter le nombre jusqu'à ce que le nouveau nom de fichier soit unique
while os.path.exists(os.path.join(directory, new_filename)):
number += 1
new_filename = f"{name}.{number}{ext}"
# Renommer le fichier
old_path = os.path.join(directory, item)
new_path = os.path.join(directory, new_filename)
os.rename(old_path, new_path)
print(f"Renamed: {os.path.join(directory, item)} -> {os.path.join(directory, new_filename)}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Rename backup files in a directory.")
parser.add_argument("directory", type=str, help="Path to the directory containing the files to rename.")
parser.add_argument("-r", "--recursive", action="store_true",
help="Recursively process subdirectories")
args = parser.parse_args()
rename_backup_files(args.directory, args.recursive)If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow