Bonjour
Je cherche à faire coder un petit script permettant :
Aller chercher en mode récursif les fichiers avec l'extension ".NEF" sur la carte SD que j'enfiche dans mon ordinateur portable. Les fichiers sont dans 2 sous niveaux de dossiers.
Renommer ces fichiers en les numérotant sur 5 chiffres (ex: 00001.NEF)
Sauvegarder sur le disque dur le dernier numéro à prendre pour que la numérotation continue à la prochaine recherche sur la carte SD.
Créer (ou tester) l'existence du dossier Images sur le disque dur de mon ordinateur sous Linux Debian, créer ou tester la présence d'un sous répertoire pour l'année en cours (pas celle des images) et créer ou tester un sous répertoire du quantième du jour. Et disposer les images de la carte SD dans le dossier du quantième du jour.
J'en ai besoin pour ma pratique de photographe amateur.
J'ai demandé à l'IA de faire cela. Le script fonctionne sauf qu'il ne trouve pas ma carte SD enfichée dans mon ordinateur. Il trouve bien mon disque dur externe mais pas le lecteur de carte SD.
Je cherche la solution pour que la carte SD soit accéssible avec ce script que je vous indique ici :
!/usr/bin/env python3
import os
import shutil
import sys
import time
from datetime import datetime
Configuration
BASE_DIR = os.path.expanduser("~/Images")
NUM_FILE = os.path.join(BASE_DIR, "last_number.txt")
FILE_TYPES = ['.NEF', '.JPG', '.JPEG', '.CR2', '.ARW', '.DNG'] # Ajoutez d'autres extensions si nécessaire
def get_removable_devices():
"""Retourne la liste des périphériques amovibles montés"""
devices = []
with open('/proc/mounts', 'r') as f:
for line in f:
parts = line.split()
if parts[1].startswith('/media/philippe/') or parts[1].startswith('/mnt/'):
devices.append(parts[1])
return devices
def get_next_number():
"""Récupère ou initialise le prochain numéro de fichier"""
try:
with open(NUM_FILE, 'r') as f:
last_num = int(f.read().strip())
except (FileNotFoundError, ValueError):
last_num = 0
return last_num + 1
def update_last_number(number):
"""Met à jour le dernier numéro utilisé"""
os.makedirs(os.path.dirname(NUM_FILE), exist_ok=True)
with open(NUM_FILE, 'w') as f:
f.write(str(number))
def get_target_path(file_path):
"""Détermine le chemin cible basé sur la date du fichier"""
# Essayez d'abord avec la date de modification
mtime = os.path.getmtime(file_path)
file_date = datetime.fromtimestamp(mtime)
year = file_date.year
day_of_year = file_date.timetuple().tm_yday
# Crée les dossiers si nécessaire
year_dir = os.path.join(BASE_DIR, str(year))
day_dir = os.path.join(year_dir, f"{day_of_year:03d}")
os.makedirs(day_dir, exist_ok=True)
return day_dir
def copy_and_rename_files():
"""Copie et renomme les fichiers des périphériques amovibles"""
devices = get_removable_devices()
if not devices:
print("Aucun périphérique amovible détecté.")
return
next_num = get_next_number()
files_copied = 0
for device in devices:
print(f"Traitement du périphérique: {device}")
for root, _, files in os.walk(device):
for file in files:
ext = os.path.splitext(file)[1].upper()
if ext in FILE_TYPES:
src_path = os.path.join(root, file)
try:
target_dir = get_target_path(src_path)
new_name = f"{next_num:05d}{ext.lower()}"
dest_path = os.path.join(target_dir, new_name)
# Copie le fichier
shutil.copy2(src_path, dest_path)
print(f"Copié: {src_path} -> {dest_path}")
next_num += 1
files_copied += 1
except Exception as e:
print(f"Erreur lors du traitement de {src_path}: {e}")
if files_copied > 0:
update_last_number(next_num - 1)
print(f"\n{files_copied} fichiers copiés. Dernier numéro utilisé: {next_num - 1}")
else:
print("Aucun fichier correspondant trouvé.")
def main():
print("=== Script de copie et organisation de fichiers ===")
print(f"Base directory: {BASE_DIR}")
try:
copy_and_rename_files()
except KeyboardInterrupt:
print("\nOpération annulée par l'utilisateur.")
sys.exit(1)
except Exception as e:
print(f"Une erreur s'est produite: {e}")
sys.exit(1)
if name == "main":
main()
# ça n'existe pas déjà cet outil ?
Posté par lejocelyn (site web personnel) . Évalué à 4 (+2/-0).
Hum, y'a un truc qui me dérange à demander à des gens de corriger un script obtenu par ia…
Sinon, il me semble que ce genre de fonction d'import et renommage de fichiers existe déjà dans les logiciels de gestion de photos. Lesquel utilisez vous ?
[^] # Re: ça n'existe pas déjà cet outil ?
Posté par ǝpɐןƃu∀ nǝıɥʇʇɐW-ǝɹɹǝıԀ (site web personnel) . Évalué à 4 (+2/-0).
Après ça reste une question purement Linux : pourquoi quand la carte SD est-elle montée, n'apparaît-elle pas dans /mnt/ ou /media/philippe ? Alors que le disque dur, visiblement, oui.
N'ayant pas d'indications sur la distribution employée, les points de montage, et nom d'utilisateur, je ne vois pas trop comment aider. Mais la question me semble avoir sa place dans ce forum. Après tout, tout le monde ne peut pas être programmeur. Ici, l'auteur de la question a déjà fait (faire) une très grosses parties du boulot, et ne demande quasiment rien en comparaison de sa problématique initale… C'est super. Même si c'est à base de LLM.
« IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace
[^] # Re: ça n'existe pas déjà cet outil ?
Posté par gaaaaaAab . Évalué à 4 (+2/-0).
je pense que la distrib est un point important. Je suis pas sûr que toutes les distribs fassent de l'auto-montage de cartes SD par défaut.
(Perso, je pense même que c'est une assez mauvaise idée d'auto-monter les supports qui peuvent se retirer mécaniquement sans avertir l'OS, mais c'est p-e que moi.)
[^] # Re: ça n'existe pas déjà cet outil ?
Posté par BAud (site web personnel) . Évalué à 3 (+1/-0).
bin il nous aurait donné le résultat de
df -h
quand la carte SD est présente, ça permettrait de voir le point de montage…[^] # Re: ça n'existe pas déjà cet outil ?
Posté par BAud (site web personnel) . Évalué à 2 (+1/-1).
eh bien, perso, j'aimerais que l'auteur de l'entrée de forum (re-)lise la doc du wiki aide-edition pour remettre en forme le code (il y a un bouton
Modifier
dans les entrées de forum).En attendant, je ne répondrai pas :p
[^] # Re: ça n'existe pas déjà cet outil ?
Posté par GuieA_7 (site web personnel) . Évalué à 4 (+2/-0).
Alors qu'il suffisait de demander à l'IA de coder sans bug #tipsdepro
# Linux debian
Posté par espéranto . Évalué à 1 (+1/-1). Dernière modification le 22 juin 2025 à 20:35.
Je suis sous linux debian version stable actuelle.
N'étant pas développeur du tout, je n'ai pas les connaissances pour mettre mon script aux formes voulues dans ce forum, j'en suis désolé.
Je souhaite simplement un petite aide pour résoudre mon problème.
A vous de voir …
[^] # Re: Linux debian
Posté par ǝpɐןƃu∀ nǝıɥʇʇɐW-ǝɹɹǝıԀ (site web personnel) . Évalué à 3 (+1/-0).
Pouvez-vous :
— insérer votre carte sd
— taper dans un terminal : df -h
— nous communiquer le résultat de cette commande
— et le résultat du script que vous souhaitez employer ?
« IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace
[^] # Re: Linux debian
Posté par BAud (site web personnel) . Évalué à 4 (+2/-0).
franchement ?!
Qu'est-ce qui est dur de modifier ton entrée de forum ? (bouton
modifier
en fin d'entrée) et ajouter :En outre, utiliser le lien
Répondre
permet de conserver l'arborescence des réponses pour savoir à quoi tu réponds ;-)Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.