La suppression d'une grande quantité de fichiers dans Windows est lente


34

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 qui contient un grand nombre de fichiers dans une arborescence de dossiers et que je le supprime (en utilisant shift-del pour enregistrer la corbeille), cela prend du temps qui semble être directement proportionnel au nombre de fichiers dans le dossier avant même qu'il ouvre la boîte de confirmation. La suppression de chaque fichier du dossier prend alors encore plus de temps.

Existe-t-il un moyen de supprimer un dossier dans Windows et de ne pas avoir le temps pris proportionnel au nombre de fichiers qu'il contient?


Réponses:


60

Existe-t-il un moyen de supprimer un dossier dans Windows et de ne pas avoir le temps pris proportionnel au nombre de fichiers qu'il contient?

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

Le pire moyen est d'envoyer dans la Corbeille: vous devez toujours les supprimer. Le pire est ensuite shift + delete avec l'Explorateur Windows: cela gaspille beaucoup de temps à vérifier le contenu avant de commencer à supprimer quoi que ce soit.

Le mieux est d'utiliser à rmdir /s/q foldernamepartir de la ligne de commande. del /f/s/q foldernameest bon aussi, mais il laisse derrière lui la structure du répertoire.

Le meilleur que j'ai trouvé est un fichier batch de deux lignes avec une première passe pour supprimer les fichiers et les sorties vers nul pour éviter les frais d'écriture sur écran pour chaque fichier singe. Un deuxième passage nettoie ensuite la structure de répertoires restante:

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

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

C'est une tâche régulière pour moi, donc je déplace généralement les éléments que je dois supprimer vers C: \ stufftodelete et j'ai ces del+rmdircommandes dans un fichier batch deletestuff.bat. Il est prévu que cela fonctionne la nuit, mais parfois je dois l'exécuter pendant la journée, donc le plus vite sera le mieux.


Vote positif pour l'inclusion> nul
Nuktu

1
Windows allait me faire attendre pour analyser plusieurs milliers de fichiers à partir d'une sauvegarde d'un ancien SDK. Cela allait prendre au moins une heure, cela pourrait prendre 10 minutes dans mon cas. Je l'ai mis dans un fichier bat pour une utilisation répétée: gist.github.com/DavidEdwards/61d4d336232284b33b237b04da5bfe10
Knossos

Voir également la même réponse avec plus d'informations sur superuser.com/questions/19762/mass-deleting-files-in-windows
Warlike Chimpanzee

1

Existe-t-il un moyen de supprimer un dossier dans Windows et de ne pas avoir le temps pris proportionnel au nombre de fichiers qu'il contient?

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

C'est assez radical, mais si vous prévoyez de le faire fréquemment pour un dossier spécifique, il pourrait être utile de créer une partition distincte pour celui-ci.


Si c'est trop radical, les autres réponses sont votre seul espoir. Il y a une bonne explication pourquoi sur serverfault . C'est pour les systèmes de fichiers Linux et 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 d'accès à tous les fichiers que vous souhaitez supprimer, vous pouvez enregistrer sur les appels qui répertorient le contenu du répertoire et appeler supprimer directement, économisant ainsi une surcharge. Toujours proportionnelle au nombre de fichiers.

Personnellement, j'aime certains extraits du rapport d'étape pour m'assurer que le programme n'est pas mort. J'aime donc supprimer des trucs via python. Par exemple, si tous les fichiers sont dans un 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  # was not a file

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

Cependant, à ce stade, il ne s'agit que de micro-optimisation, donc ne fera pas grand-chose à moins d'avoir des millions de fichiers dans un répertoire. (comme moi, lol, qu'ai-je fait D :)


0

Installez gnutools for windowset exécutez:

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

0

Assurez-vous de ne pas sauvegarder les fichiers dans le cloud et d'essayer de les supprimer en même temps!

Avec de nombreuses solutions de sauvegarde dans le cloud, les fichiers sont verrouillés pendant leur sauvegarde, puis vous devez attendre leur sauvegarde.

Si vous rencontrez ce problème avec par exemple un répertoire temporaire (ou quelque chose qui n'a pas besoin d'être sauvegardé) assurez-vous que le répertoire temporaire n'est pas sélectionné dans votre jeu de sauvegarde.


0

J'ai trouvé que les dossiers avec plusieurs couches de répertoires ont tendance à ralentir vraiment la capacité de Windows à les supprimer rapidement. Je travaillais sur un projet où il fallait 5 niveaux pour arriver au dossier node_modules, qui est toujours une bête à supprimer, même avec

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

Ce que je finis par faire dans cette situation est de naviguer vers le dossier node_modules ou tout répertoire ayant les niveaux les plus profonds et de commencer à sélectionner et supprimer environ une douzaine de répertoires à la fois. Si j'obtiens plusieurs suppressions, cela oblige la Corbeille à travailler dans des processus parallèles plutôt que le seul thread que je pense qu'il utilise, accélère considérablement le processus.

Une fois que mon répertoire le plus profond est vide, je monte de quelques niveaux et fais la même chose. Cela a permis de réduire les suppressions qui m'ont pris plus d'une heure à quelques minutes.

C'est un processus très manuel et pourrait probablement être scénarisé avec un certain succès, mais c'est ce qui a fonctionné pour moi


0

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

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

Exemple d'utilisation:

set path="C:\Projects\My React Project"
del /f/s/q %path% > nul
rmdir /s/q %path%

-2

avez-vous essayé d'utiliser l'invite de commande

rmdir /s /q foldername

toutes les opérations de fichiers volumineux dans les interfaces graphiques sont lentes - principalement parce que le retour visuel (barre de progression) doit être repeint plusieurs fois


5
Ça n'a pas de sens. L'opération peut être lente car l'interface graphique doit compter tous les fichiers pour estimer le temps requis, mais pas en raison d'une nouvelle peinture.
Bender

mal ... Je travaille constamment avec de gros dossiers (principalement un serveur win2k), et j'utilise TotalCommander pour déplacer / copier / supprimer des trucs. J'ai remarqué que si je minimisais TC ou mettais une autre fenêtre d'application au-dessus de TC, les choses se faisaient au moins 50% plus rapidement. TC repeint toujours des trucs visuels, mais tout est ignoré dans la composition ...
nEJC

6
Votre ordinateur est-il si lent que les opérations de l'interface graphique ont un impact sur les performances d'E / S du disque? Ou TotalCommander est-il incroyablement mal codé? Le disque est des centaines ou des milliers de fois plus lent que le CPU, la RAM et la carte vidéo. Si les graphiques ralentissent les écritures de votre disque, vous avez des problèmes majeurs.
M. Shiny et New 安 宇

1
La question «n'avait pas pris le temps proportionnellement au nombre de dossiers» pour une raison. Je ne cherche pas 50% plus vite.
Sindri Traustason

@Sindri Si vous le faites à l'invite de commande, il ne devrait y avoir presque aucun délai avant que le système commence à travailler sa magie. Autant que je sache, ce prétraitement est là où se situe votre problème.
nEJC
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.