41 votes

Suppression d'un grand nombre de fichiers sous Windows est lente

J'ai une boîte Windows XP avec un disque NTFS et la suppression de grandes quantités de fichiers est extrêmement lente. Si je sélectionne un dossier contenant un grand nombre de fichiers dans une arborescence de dossiers et que je supprime (en utilisant shift-del pour enregistrer dans la corbeille) cela prend du temps qui semble être directement proportionnel au nombre de fichiers dans le dossier avant même que la boîte de confirmation n'apparaisse. Il faut ensuite un temps encore plus long pour supprimer chaque fichier du dossier.

Existe-t-il un moyen de supprimer un dossier dans Windows sans que le temps pris soit proportionnel au nombre de fichiers qu'il contient?

75voto

Matt Boehlig Points 402

Y a-t-il un moyen de supprimer un dossier dans Windows sans que le temps pris ne soit proportionnel au nombre de fichiers qu'il contient?

Je ne pense pas, mais certaines méthodes sont clairement beaucoup plus rapides que d'autres.

La pire manière est d'envoyer vers la Corbeille : vous devez quand même les supprimer. Ensuite, le pire est de faire shift+delete avec l'Explorateur Windows : cela gaspille beaucoup de temps à vérifier le contenu avant de commencer à supprimer quoi que ce soit.

Le meilleur moyen est d'utiliser rmdir /s/q nomdudossier en ligne de commande. del /f/s/q nomdudossier est aussi bon, mais il laisse la structure du répertoire derrière lui.

La meilleure méthode que j'ai trouvée est un fichier batch à deux lignes avec une première passe pour supprimer les fichiers et afficher sur nul pour éviter les frais généraux d'écriture à l'écran pour chaque fichier singulier. Une deuxième passe nettoie ensuite la structure de répertoire restante:

del /f/s/q nomdudossier > nul
rmdir /s/q nomdudossier

C'est presque trois fois plus rapide qu'un simple rmdir, basé sur des tests de temps avec un disque crypté Windows XP, supprimant ~30 Go/1 000 000 de fichiers/15 000 dossiers: rmdir prend ~2.5 heures, del+rmdir prend ~53 minutes. Plus d'infos ici.

Ceci est une tâche régulière pour moi, donc je déplace habituellement ce que je dois supprimer vers C:\raspoubiquer et j'ai ces commandes del+rmdir dans un fichier batch deletestuff.bat. Cela est programmé pour s'exécuter la nuit, mais parfois j'ai besoin de l'exécuter pendant la journée donc plus vite c'est mieux.

3voto

FirefoxMetzger Points 131

Y a-t-il un moyen de supprimer un dossier sous Windows sans que le temps pris soit proportionnel au nombre de fichiers qu'il contient ?

Eh bien, oui, formatez la partition. Je suis un peu surpris que personne n'ait suggéré cela au cours des 9 dernières années.

C'est assez radical, mais si vous envisagez de le faire fréquemment pour un dossier spécifique, il pourrait être utile de créer une partition séparée pour cela.


Si c'est trop radical, les autres réponses sont votre seul espoir. Il y a une bonne explication sur serverfault. C'est pour linux et les systèmes de fichiers XFS, mais la même logique s'applique ici. Vous ne pouvez pas améliorer beaucoup les fonctions intégrées du système d'exploitation.

Cependant, si vous connaissez les chemins de tous les fichiers que vous souhaitez supprimer, vous pouvez économiser des appels qui listent le contenu du répertoire et appeler la suppression directement, en économisant ainsi une certaine charge. Toujours proportionnel au nombre de fichiers cependant.

Personnellement, j'aime avoir une sorte de rapport de progression pour m'assurer que le programme n'a pas planté. Alors j'aime supprimer des choses via python. Par exemple, si tous les fichiers se trouvent dans un seul répertoire sans sous-répertoires :

import tqdm
import sys
import os

location = sys.argv[1]
directory = os.fsencode(location)

with os.scandir(directory) as it:
    for dir_entry in tqdm.tqdm(it):
        try:
            os.remove(dir_entry.path)
        except OSError:
            pass  # n'était pas un fichier

Cela supprime environ 250 fichiers/s sur mon ancien SEAGATE ST3250620NS de 12 ans. Je suppose que ce sera beaucoup plus rapide sur votre disque.

Cependant, à ce stade, ce n'est qu'une micro-optimisation, donc cela ne fera pas grand-chose sauf si vous avez des millions de fichiers dans un seul répertoire. (comme moi, lol, qu'ai-je fait D:)

1voto

Installer gnutools pour Windows et exécuter :

find VOTREDOSIER -type d -maxdepth 3 | xargs rm -Rf

1voto

Brian Schlenker Points 101

J'ai utilisé la réponse originale de Hugo pour créer un fichier .bat que j'utilise lorsque je supprime des projets NPM. J'ai ajouté une variable de chemin et je n'ai qu'à copier-coller le chemin une seule fois. Double-cliquez sur le fichier .bat et il fait tout le travail - pas besoin de tout taper.

set path="CHEMIN_DU_DOSSIER"
del /f/s/q %path% > nul
rmdir /s/q %path%

Exemple d'utilisation :

set path="C:\Projets\Mon Projet React"
del /f/s/q %path% > nul
rmdir /s/q %path%

1voto

Foo Bar Points 1350

Sur les nouvelles versions de Windows 10 qui viennent avec le sous-système Linux (essentiellement une coquille Ubuntu) vous pouvez utiliser des commandes Linux comme rm -rf répertoire. Cela semble être la manière la plus rapide sur mes machines.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X