Quelle est la meilleure façon de supprimer 100 000 fichiers d'un répertoire Windows


12

J'avais un utilisateur avec plus de 100 000 fichiers dans un seul répertoire. La machine se verrouille et devient inutilisable pendant longtemps tandis que l'Explorateur remplit la mémoire et la machine peut se bloquer. Existe-t-il un moyen simple de vider le répertoire et le contenu? Nous avons essayé d'utiliser la ligne de commande deltree et cela ne s'est pas beaucoup mieux passé.

DaveF

Supplémentaire -

Nous avons eu ce problème plusieurs fois avec le même utilisateur (en fait client). Un programme crée des centaines de milliers de fichiers temporaires pendant son exécution. Si le programme fonctionne correctement, cela n'a pas d'importance car ils sont supprimés en ralentissant à la fin. Mais de temps en temps, il meurt en laissant le fouillis de fichiers. Nous avons essayé d'utiliser les méthodes rmdir et del etc et elles sont plus rapides que d'utiliser l'explorateur mais nous nous retrouvons généralement avec les mêmes problèmes. La partition est endommagée, il y a un fichier verrouillé inexpliqué, certains fichiers ont un problème d'autorisation, ce qui empêche la suppression de fonctionner. Normalement, ces problèmes peuvent être résolus avec un redémarrage, mais dans ce cas, car il s'agit d'un système critique, nous ne pouvons pas le faire en temps de production. Sur Unix, vous pouvez simplement faire un rm -rf, etc. et c'est rapide et il n'y a généralement pas de vrai problème avec.

BTW - l'application est en cours de modification, mais cela n'entrera pas en production pendant un certain temps et je pensais que ce problème était probablement intéressant pour d'autres.

Mise à jour - parce que nous avons MKS Nutcracker sur le système (sans les utilitaires de ligne de commande), nous avons demandé au programmeur de créer un rm simple. Il s'agit de plusieurs commandes plus rapidement que del / deltree, etc. Je trouve étrange qu'il n'y ait pas une telle application simple facilement disponible comme outil d'administration système Windows standard.


Réponses:


15

Vous pouvez utiliser rmdir:

rmdir /s /q FOLDERNAME

Drapeaux: /ssignifie supprimer récursivement, /qc'est le mode "silencieux".


Nous avons essayé ceci - j'ajouterai plus à la question.
David Allan Finch,

cela aurait dû fonctionner pour vous. Cela a-t-il fonctionné?
s_ruchit

oui surtout - j'ai ajouté quels problèmes nous avons vu ci-dessus dans la question. Merci pour votre commentaire.
David Allan Finch

Je vais accepter cette réponse. Mais il existe une meilleure solution qui consiste à utiliser un modèle de style Unix plus simple, mais comme cela n'est pas disponible pour la plupart des utilisateurs, c'est le meilleur choix pour 99% des utilisateurs. Il devrait y avoir un style rm unix implémenté pour Windows qui ne fait rien d'autre que des suppressions récursives. BTW nos programmeurs MKS remove_tree (voir ci-dessus) ont rashé rmdir donc le problème n'est pas Windows mais les applications intégrées.
David Allan Finch

6

J'utilise pour avoir ce problème avec les serveurs que j'administrais. Ignorez complètement l'explorateur et utilisez l'invite de commande. Accédez au dossier et "del " .

De cette façon, vous évitez les frais généraux de l'interface graphique (l'explorateur est la corbeille) et le bac de recyclage.


Nous avons essayé ceci - j'ajouterai plus à la question.
David Allan Finch,

4

Sauf si vous en avez besoin pour les applications 16 bits héritées, essayez d'augmenter les performances en désactivant la génération de noms de fichiers courts. Cela peut avoir un impact significatif sur les opérations de répertoire avec un grand nombre de fichiers.

Regedt32 select:
"HKLM\system\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameC
reation"=1

Utilisez ensuite:

Chemin RMDIR / S / Q [lecteur:]

pour supprimer le répertoire avec tous ses fichiers.


C'est intéressant à savoir.
David Allan Finch


3

Que diriez-vous de déplacer ce dossier temporaire vers un autre lecteur / partition? Au lieu de supprimer toutes les ordures, vous pouvez formater le lecteur (GUI ou ligne de commande). Avec un formatage rapide, cela devrait être raisonnablement rapide.


1
Nous avons essayé cela et parfois cela ne le permettait pas. Le client exécute désormais le programme dans un répertoire différent à chaque fois.
David Allan Finch

Créez un lien dur entre le chemin et le lecteur, c'est-à-dire: le lien dur "c: \ mon application stupide \ où les fichiers stockés" pointe le lecteur X: dans un lot de démarrage
Nime Cloud

2

Ceci est une combinaison des messages précédents

ouvrir une fenêtre de commande:
File -> Run -> cmd

Supprimer le répertoire
rmdir /s /q FOLDERNAME

OU

Supprimer un modèle de fichiers
cd \....\directory
del *.[something]

Comme vous l'avez noté dans votre question, l'Explorateur Windows peut vraiment ralentir les choses.

Après avoir vu votre mise à jour, je possède l'un des miens
Consultez cette liste de suppresseurs de fichiers


J'avais remarqué cela avec seulement plusieurs centaines de fichiers dans le passé, il est dommage que l'explorateur puisse être fait pour le faire aussi rapidement que les applications en ligne de commande - ils pourraient faire en sorte que le client le fasse lui-même. Merci pour votre réponse.
David Allan Finch,

1

Je n'ai rien de mieux que del et rm, mais même s'ils prennent très longtemps, cela ne devrait pas endommager la partition. Les fichiers verrouillés peuvent être dus au fait que le programme qui les a créés est mort de manière inattendue.

Parfois, même si les fichiers ne peuvent pas être supprimés, ils peuvent être déplacés vers un autre sous-répertoire temporaire. Je viens de créer un sous-répertoire _todel et de les y déplacer. Cela fonctionne généralement mieux si je déplace le répertoire entier d'un niveau vers le haut, plutôt que les fichiers eux-mêmes.

En dehors de cela, la seule façon d'accélérer les suppressions est de défragmenter le disque dur. Une solution temporaire peut être de déplacer ce répertoire vers un partage samba ou d'utiliser une jonction NTFS vers un disque dur USB portable. (Une petite partition serait meilleure et plus rapide que d'utiliser l'intégralité du disque dur). Vous pouvez ensuite simplement éjecter le disque dur et effectuer un formatage rapide sur un autre PC.


C'est ce que je pense - IE les fichiers endommagés mais pourquoi ne sont-ils pas fermés par le noyau NT? La vitesse est un problème avec le programme, donc utiliser Samba ou un disque dur USB n'est pas un démarreur. Mais le client a été suggéré de créer une partition distincte pour chaque exécution et de reformater. Je ne sais pas s'ils l'ont déjà essayé. - Merci
David Allan Finch

1

Une partition endommagée lors de la suppression de fichiers? C'est un problème majeur avec le disque, quel que soit le nombre de fichiers supprimés.

J'essaierais la ligne de commande supprimer et supprimer autant que vous le pouvez jusqu'à ce que vous en rencontriez un qui est verrouillé. Utilisez ensuite l'Explorateur de processus pour trouver quel processus a ouvert ce fichier. Tuez ce processus (si vous le pouvez), puis recommencez la suppression. Rincez, répétez :)


Voudrais essayer mais nous n'avons pas d'accès direct à la machine et l'application est morte. Merci quand même.
David Allan Finch

1

Redémarrez à l'aide d'un CD Linux 'Live', le rm -rf


Nous ne pouvons pas simplement redémarrer ce serveur car il est essentiel pour le client - mais merci pour la réponse.
David Allan Finch

1

Un peu hacky, mais vous pouvez créer un script qui supprimera en bloc les fichiers, je ne connais pas le format, mais en supposant que ce sont des fichiers qui commencent par les lettres az, vous pouvez le faire

deltree /y a*
deltree /y b*
...
deltree /y z*

changer deltree avec votre méthode de suppression de choix. probablement plus lent, mais moins sujet aux erreurs?

sidenote: vous pouvez également essayer d'installer cygwin pour obtenir des commandes comme rm qui continueraient probablement à supprimer des fichiers même après avoir rencontré une erreur avec un fichier.


Cela a été essayé mais cela n'a pas vraiment résolu le problème - merci quand même.
David Allan Finch

Nous avons également installé MKS Nutcracker, mais pour des raisons de sécurité, les utilitaires de ligne de commande ont été supprimés - pas le choix. Mais ce que nous avons fait est écrit sur notre propre compte et cela fonctionne.
David Allan Finch

1

Les différentes méthodes fonctionnent avant tout. Si vous avez cygwin chargé sur une clé USB, vous pouvez simplement le brancher sur votre clé USB locale, allumer votre shell cygwin et exécuter la commande RM comme mentionné ci-dessus. C'est un moyen pratique de garder la flexibilité Unix à portée de main.


Il s'agit d'une solution raisonnable lorsque vous gérez le système.
David Allan Finch

1

Vous pouvez également démarrer dans la console de récupération, ou quelque chose du genre. Cela devrait ignorer complètement tout problème étrange avec le système d'exploitation.


Désolé, nous ne pouvons pas simplement redémarrer le serveur, mais merci pour la réponse.
David Allan Finch

1

Montez le dossier à partir d'une machine Linux et effectuez la suppression récursive à partir de là.

# mount -t cifs //server/share /mnt/tobedeleted -o username=yourshareusername

# rm /mnt/tobedeleted/* -R

Vous pouvez même utiliser un travail cron pour supprimer les fichiers à intervalles réguliers.


avez-vous essayé cela?
David Allan Finch

1

Pourquoi ne pas simplement utiliser robocopy et mettre en miroir un répertoire vide?

Créez simplement un dossier vide, puis utilisez:

ROBOCOPY C:\ThisIsAnEmptyFolder C:\Users\SomeUser\Desktop\SomeFolderWithTempFiles /MIR

0

Si aucune des autres suggestions ne fonctionne, avez-vous envisagé d'accélérer vos E / S?

Achetez de meilleurs contrôleurs, des disques plus rapides.

Ou je me demande, si les fichiers sont temporaires (comme vous l'impliquez) et que les tailles le permettent, vous pouvez ajouter de la RAM supplémentaire à la boîte (pas cher) et configurer un disque RAM?

Dans le meilleur des cas, les performances ne seraient pas dégradées lors de la suppression de gros volumes de fichiers. Dans le pire des cas, un redémarrage effacerait la partition.


J'adore mais je ne pense pas que le client va débourser car il attend une nouvelle version du programme - merci pour la réponse.
David Allan Finch,

La RAM du serveur au Royaume-Uni est actuellement d'environ 10 GBP par gigaoctet.
tomfanning

Certes, mais le client paie X pour la machine (à partir d'un devis) et ne voit aucune raison de dépenser Y de plus.
David Allan Finch

Parce que le serveur spécifié ne fait pas assez bien le travail?
tomfanning

C'est assez bon pour le travail. Le problème est que le programme a un bogue en cours de correction. Ils ne dépenseront plus d'argent.
David Allan Finch

0

Essayez de le copier-coller dans la corbeille, il devrait contourner la tentative de déplacement de chaque fichier. Je ne sais pas ce que cela fera pour vider le bac, car il parcourra probablement chaque fichier.


Je pense que le client a essayé cela et ce n'était pas beaucoup mieux que d'utiliser Explorer normalement. Merci
David Allan Finch

0

La suppression avec SHIFT + DEL fait-elle une différence quant à la vitesse?


Quand j'ai essayé la dernière fois, c'était à peu près la même chose.
David Allan Finch

En fait, je viens de l'essayer à nouveau - avec une ancienne installation et j'attends toujours. Je vais probablement abandonner et utiliser le MKS rm.
David Allan Finch,
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.