Bonjour,
Ce problème de suppression lente de nombreux petits fichiers est extrêmement courant et bien documenté. Avec des dizaines de milliers de fichiers JPEG de 20 Ko, vous touchez à une limitation fondamentale du système de fichiers NTFS couplée au comportement de l’Explorateur Windows. Voici l’analyse complète et les solutions pour accélérer drastiquement vos suppressions.
Pourquoi Windows 10 est lent à supprimer de nombreux petits fichiers
1. Le problème de la Corbeille
Par défaut, l’Explorateur Windows déplace les fichiers dans la Corbeille avant de les supprimer. Pour des dizaines de milliers de fichiers, cela implique :
- Calcul de la taille totale (opération séquentielle sur chaque fichier)
- Déplacement métadonnées par métadonnées vers
$Recycle.Bin
- Mise à jour du Master File Table (MFT) pour chaque entrée
Cette opération est O(n) — linéaire par rapport au nombre de fichiers — et génère énormément d’opérations d’I/O aléatoires, ce qui est très pénalisant même sur SSD.
2. La fragmentation du MFT sur disque dur (HDD)
Si vous travaillez sur un disque dur traditionnel (HDD), les têtes de lecture doivent se déplacer physiquement pour mettre à jour chaque entrée MFT. Avec 50 000 fichiers, cela représente des milliers de déplacements mécaniques.
3. Les notifications de changement du système de fichiers
Windows 10 émet des notifications USN Journal pour chaque modification du système de fichiers. Ces notifications sont consommées par l’Indexeur de recherche Windows, le service de synchronisation OneDrive, les antivirus, et d’autres services. Chaque suppression déclenche une cascade d’opérations secondaires.
4. L’antivirus en temps réel
Les solutions antivirus comme Windows Defender (ou tout autre antivirus tiers) interceptent chaque opération sur un fichier, y compris la suppression. Pour 50 000 fichiers JPEG, cela multiplie le temps par un facteur significatif.
Solutions classées par ordre d’efficacité
Solution 1 : Utiliser la commande del avec suppression directe (bypass Corbeille)
La méthode la plus rapide pour supprimer de nombreux petits fichiers est d’utiliser l’invite de commandes en contournant la Corbeille :
REM Supprimer tous les .jpg dans un dossier (sans confirmation, sans corbeille)
del /f /q "C:\chemin\vers\dossier\*.jpg"
REM Supprimer récursivement dans tous les sous-dossiers
del /f /q /s "C:\chemin\vers\dossier\*.jpg"
REM Supprimer un dossier entier et tout son contenu
rmdir /s /q "C:\chemin\vers\dossier"
Le flag /f force la suppression des fichiers en lecture seule, /q désactive les confirmations. rmdir /s /q est généralement la méthode la plus rapide pour supprimer un dossier complet.
Solution 2 : PowerShell avec suppression parallèle
PowerShell permet d’exploiter plusieurs threads pour les suppressions :
# Suppression rapide sans corbeille
Remove-Item -Path "C:\chemin\vers\dossier\*" -Recurse -Force
# Suppression parallèle (PowerShell 7+ recommandé)
Get-ChildItem -Path "C:\chemin\vers\dossier" -Filter "*.jpg" -Recurse |
ForEach-Object -Parallel { Remove-Item $_.FullName -Force } -ThrottleLimit 8
# Pour un dossier entier : la méthode la plus rapide
[System.IO.Directory]::Delete("C:\chemin\vers\dossier", $true)
La dernière méthode utilisant [System.IO.Directory]::Delete appelle directement l’API .NET et est souvent 2 à 5 fois plus rapide que Remove-Item.
Solution 3 : Désactiver temporairement l’indexation et l’antivirus
# Désactiver Windows Search (indexeur) pendant la suppression
Stop-Service -Name "WSearch" -Force
Write-Host "Indexeur arrêté — procédez à la suppression maintenant"
# Réactiver après suppression
Start-Service -Name "WSearch"
Pour Windows Defender, ajoutez le dossier en exclusion temporaire avant de supprimer :
# Ajouter une exclusion temporaire
Add-MpPreference -ExclusionPath "C:\chemin\vers\dossier"
# Supprimer l'exclusion après la suppression
Remove-MpPreference -ExclusionPath "C:\chemin\vers\dossier"
Avertissement : Ne laissez pas une exclusion antivirus active sur un dossier de production.
Solution 4 : Outil RoboCopy (miroir d’un dossier vide)
Une technique très efficace pour supprimer de nombreux fichiers est de “miroir” un dossier vide sur le dossier cible avec RoboCopy :
REM Créer un dossier vide temporaire
mkdir C:\DossierVide
REM Utiliser RoboCopy pour vider le dossier cible ultra-rapidement
robocopy C:\DossierVide "C:\chemin\vers\dossier" /MIR /MT:16
REM Supprimer ensuite le dossier lui-même
rmdir /s /q "C:\chemin\vers\dossier"
/MIR synchronise en miroir (supprime tout ce qui n’est pas dans la source), /MT:16 utilise 16 threads en parallèle. Cette méthode peut être 10 à 20 fois plus rapide que la suppression via l’Explorateur pour des milliers de fichiers.
Comparatif des méthodes
| Méthode |
Vitesse relative |
Complexité |
Risque |
| Explorateur Windows (Corbeille) |
Très lente (référence) |
Nulle |
Nulle |
del /f /q |
3-5x plus rapide |
Faible |
Faible |
rmdir /s /q |
5-10x plus rapide |
Faible |
Faible |
PowerShell [IO.Directory]::Delete |
5-10x plus rapide |
Faible |
Faible |
RoboCopy /MIR /MT:16 |
10-20x plus rapide |
Modérée |
Modérée |
| RoboCopy + désactivation indexeur |
15-30x plus rapide |
Modérée |
Faible |
Recommandations pour votre workflow habituel
Puisque vous traitez régulièrement des lots de dizaines de milliers de JPEG, voici un script PowerShell réutilisable :
# Script de suppression rapide d'un lot de fichiers JPEG
param(
[Parameter(Mandatory=$true)]
[string]$DossierCible
)
Write-Host "Préparation de la suppression rapide de : $DossierCible"
# Arrêter l'indexeur temporairement
$indexeur = Get-Service -Name "WSearch" -ErrorAction SilentlyContinue
if ($indexeur -and $indexeur.Status -eq "Running") {
Stop-Service -Name "WSearch" -Force
$indexeurActif = $true
Write-Host "Indexeur Windows Search arrêté"
}
# Supprimer via l'API .NET directement
$chrono = [System.Diagnostics.Stopwatch]::StartNew()
try {
[System.IO.Directory]::Delete($DossierCible, $true)
Write-Host "Suppression terminée en $($chrono.Elapsed.TotalSeconds) secondes"
} finally {
# Toujours réactiver l'indexeur
if ($indexeurActif) {
Start-Service -Name "WSearch"
Write-Host "Indexeur Windows Search redémarré"
}
}
Utilisez ce script avec : .\suppression_rapide.ps1 -DossierCible "C:\lot_jpeg_ancien"
Impact du type de stockage
| Type de stockage |
Comportement sur petits fichiers |
Conseil |
| HDD (disque dur) |
Très lent (I/O aléatoires pénalisants) |
RoboCopy /MT indispensable |
| SSD SATA |
Modéré |
del ou rmdir suffisants |
| SSD NVMe |
Rapide mais limité par NTFS |
[IO.Directory]::Delete optimal |
| Réseau (NAS/SMB) |
Très lent (latence par fichier) |
RoboCopy avec /MT |
Si vous travaillez fréquemment avec ce type de lots, envisagez également de placer vos dossiers de travail temporaires sur un volume ReFS (Resilient File System) qui gère beaucoup mieux les opérations sur grand nombre de petits fichiers que NTFS.
N’hésitez pas à préciser votre type de stockage et le nombre exact de fichiers par lot pour affiner les recommandations.
Ayi NEDJIMI — Consultant IT & Microsoft
Pour un accompagnement personnalisé : ayinedjimi-consultants.fr