2009-08-07 07:00:33 +0000 2009-08-07 07:00:33 +0000
142
142

Suppression en masse de fichiers dans Windows

J'ai un répertoire, qui contient ~ 3 millions de fichiers dans certains sous-répertoires sur un serveur Windows 2008. La suppression manuelle des fichiers via SHIFT+DEL sur le répertoire racine prend des heures. Existe-t-il un autre moyen d'effectuer la suppression de manière plus rapide ?

Réponses (14)

180
180
180
2011-05-27 11:27:41 +0000

Attention: si vous avez des liens symboliques vers des répertoires, alors del supprimera les répertoires réels et non les liens symboliques. Faites très attention à cela et n'exécutez pas ces commandes à moins de savoir qu'il n'y a pas de liens symboliques dans le répertoire cible.


Je dois régulièrement supprimer de nombreux fichiers et répertoires d'un lecteur crypté WinXP, généralement environ 22 Go de 500 000 fichiers dans 45 000 dossiers.

Supprimer avec l'Explorateur Windows est une perte de temps car il perd beaucoup de temps à énumérer les fichiers. En général, je déplace les fichiers à supprimer vers C:\stufftodelete et j'ai un fichier batch deletestuff.bat à rmdir /s/q C:\stufftodelete. Il est prévu que cela fonctionne la nuit, mais parfois je dois le faire pendant la journée, donc le plus rapide est le mieux.

Voici les résultats d'un test rapide sur un petit échantillon de 5,85 Mo de 960 fichiers dans 303 dossiers. J'ai exécuté la méthode 1 suivie de la méthode 2, puis j'ai réinitialisé les répertoires de test.

La méthode 1 supprime les fichiers et la structure des répertoires en un seul passage :

rmdir /s/q foldername

La méthode 2 a un premier passage pour supprimer les fichiers et sort à zéro pour éviter la surcharge d'écriture à l'écran pour chaque fichier singe. Une deuxième passe permet ensuite de nettoyer la structure des répertoires restants :

del /f/s/q foldername > nul
rmdir /s/q foldername
  • Méthode 1 : 17,5s, 14,9s, 13,9s, 14,8s, 13,8s : moyenne 14,98 secondes
  • Méthode 2 : 14,3s, 12,1s, 11,7s, 14,2s, 11,8s : moyenne 12,82 secondes

Voici les résultats d'un autre test utilisant 404 Mo de 19 521 fichiers dans 3 243 dossiers :

  • Méthode 1 : 2 minutes 20 secondes
  • Méthode 2 : 2 minutes 33 secondes

Il n'y a donc pas grand-chose, probablement trop proche pour juger sur un seul test.


Edit : J'ai retesté avec beaucoup plus de données, c'est un cas typique pour moi : 28,3 Go de 1 159 211 fichiers dans 146 918 dossiers :

  • Méthode 1 : 2h 15m, 2h 34m : moyenne : 2 heures 25 minutes
  • Méthode 2 : 49m, 57m : moyenne : 53 minutes

Wow, la méthode 2 est presque trois fois plus rapide que la méthode 1 ! Je vais mettre à jour mon deletestuff.bat !

18
18
18
2011-10-31 06:37:53 +0000

Si vous devez régulièrement supprimer de grandes arborescences de répertoires, pensez à stocker la racine de cette arborescence sur une partition séparée, puis à la formater rapidement chaque fois que vous devez tout supprimer. Si vous avez besoin d'automatiser cette opération, vous pouvez utiliser cette commande DOS :

echo Y | format Z: /FS:NTFS /X /Q

où Z : est votre partition “volatile”. Note : la partition ne doit pas avoir de label. J'ai blogué à ce sujet ici .

9
9
9
2009-08-07 07:07:04 +0000

À l'invite de commande (Démarrer -> Exécuter -> cmd) :

del /f /s /q foldername
7
7
7
2011-05-25 14:00:51 +0000

En plus de copier/déplacer des fichiers très rapidement (en utilisant sa propre API), TeraCopy peut supprimer des fichiers et il est très rapide aussi. Depuis que j'ai découvert TeraCopy, je n'utilise pas d'ordinateur sans qu'il soit installé (si je dois copier/déplacer/supprimer).

Le même installateur installe l'édition x64 mais pour l'utiliser il faut le forcer manuellement.

La version bêta que je recommande par rapport aux versions stables : http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/

6
6
6
2012-02-09 17:35:24 +0000

J'ai fait un dossier sur les chauves-souris qui font la même chose.

@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T

il fait le travail en deux étapes, une, il essaie de supprimer les fichiers. Et la deuxième étape est d'essayer de s'approprier les fichiers. y doit être changé en fonction de votre localité (signifiant oui en anglais). Si la tâche échoue (par exemple si elle échoue à cause d'une permission), vous devez la relancer. Cependant, le deuxième tour n'essaiera pas de supprimer les fichiers supprimés au premier tour, donc cela pourrait être assez rapide.


Comment l'utiliser. Enregistrez sous le nom delfolder.bat dans un chemin d'accès (par exemple c:\windows), puis lancez le sous le nom

delfolder "foldername"

où foldername est le nom du dossier

Dans mon test, la suppression de 123'000 fichiers a pris 3 minutes (sata 7200rpm). YAY !

4
4
4
2011-12-23 15:47:15 +0000

L'utilisation du code ci-dessous fonctionne généralement bien pour moi.

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
3
3
3
2009-08-07 07:09:35 +0000

Utilisez la commande rd /s de l'invite de commande.

2
2
2
2009-10-06 21:59:15 +0000

La meilleure solution pratique est probablement de déplacer le dossier quelque part (par exemple dans la corbeille) et de commencer à le supprimer. Cela prendra du temps, mais au moins, il sera hors de portée.

Je suis presque sûr que le temps nécessaire pour supprimer tous ces fichiers est une exigence inhérente à la tâche, et non une inefficacité dans la mise en œuvre de la suppression.

1
1
1
2009-10-06 23:45:48 +0000

Installez Cygwin et utilisez rm -r. Mais cela risque d'être excessif.

1
1
1
2011-05-31 12:40:36 +0000

La génération de noms de fichiers courts est-elle activée ? Si oui, en avez-vous vraiment besoin ? La suppression d'un fichier n'est qu'une opération de métadonnées. Donc, si vous avez deux fois plus de noms à supprimer, la quantité de travail est nettement plus importante.

0
0
0
2017-12-13 19:46:11 +0000

La réponse de Hugo est la plus rapide mais elle ne supprime pas les fichiers cachés ou système lors de la première passe, donc si vous voulez une solution plus complète, utilisez le paramètre /a :

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

A propos du fichier BAT de Magallanes , soyez très prudent avec takeown et icacls, car les hardlinks partagent les mêmes permissions et propriétaires, donc s'il y a des hardlinks insaturés dans le dossier que vous voulez supprimer, l'utilisation de takeown et icacls changera les permissions et propriétaires des fichiers en dehors du dossier.

En utilisant l'outil ln.exe vous pouvez lister tous les fichiers liés en dur à l'intérieur du dossier et savoir s'ils sont liés en dur à des fichiers en dehors du dossier (liens durs insaturés) :

ln.exe --enum foldername > HardlinksList.txt
```.
0
0
0
2010-04-03 16:30:58 +0000

Avez-vous essayé l'une de ces deux applications ?

Assurez-vous de régler le nombre d'écrasements sur 0 si vous voulez obtenir les meilleurs résultats. Pour ce faire, cliquez sur les options puis modifiez la valeur en bas de la boîte de dialogue.

Entrez le chemin d'accès à supprimer dans le champ Source et cliquez ensuite sur Supprimer.

Ces applications ne mettent pas les fichiers dans la corbeille. A utiliser avec précaution.

0
0
0
2017-06-15 12:00:52 +0000

Cette information est fournie pour compléter et augmenter les mesures prises dans les réponses mentionnées précédemment.

Les deux méthodes mentionnées ci-dessus semblent assez efficaces, mais il serait difficile de déterminer les performances à moins qu'elles ne soient soumises aux mêmes conditions :

  • Dispositif et modèle de disque dur physique
  • De préférence, ATTO/ Crystal Disk étalonné avant le clonage des données qu'il contient
  • Même emplacement et géométrie de partition/volume
  • La façon de procéder serait de défragmenter les échantillons de partitions/dossiers et de les cloner exactement comme s'il s'agissait de deux disques durs exactement de même type (de l'étape précédente)
  • Ensuite, exécuter les configurations via un fichier de lots et utiliser Powershell Cmdlet pour enregistrer et mesurer leurs performances.

  • Voici quelques exemples de dossiers (nommés comme taille totale) sur lesquels j'ai expérimenté mais n'ai pas pu obtenir de performances / résultats concluants.

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • J'aurais bien affiché les fichiers de log de sortie, mais je pense que l'écart est énorme en raison de la taille et de la répartition des fichiers de dossiers, etc.

Powershell:

PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt

PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt
-1
-1
-1
2009-08-07 07:13:28 +0000

La suppression d'un dossier est plus rapide que la suppression de plusieurs fichiers.

Donc si vous préférez utiliser la souris plutôt que l'invite de commande, vous pouvez créer un répertoire, y déplacer des fichiers et le supprimer (avec Shift+Suppr comme vous l'avez dit).