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

Eliminación masiva de archivos en Windows

Tengo un directorio, que contiene ~ 3 millones de archivos en ciertos subdirectorios en un servidor Windows 2008. Borrar manualmente los archivos a través de SHIFT+DEL en el directorio raíz lleva años. ¿Existe alguna otra manera de hacer el borrado de una manera más rápida?

Respuestas (14)

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

ADVERTENCIA: si tiene enlaces simbólicos a directorios entonces del borrará los directorios reales y no los enlaces simbólicos. Tenga mucho cuidado con esto y no ejecute estos comandos a menos que sepa que no hay enlaces simbólicos dentro del directorio de destino.

  • *

Regularmente necesito borrar muchos archivos y directorios de una unidad encriptada de WinXP, normalmente alrededor de 22 GB de 500.000 archivos en 45.000 carpetas.

Borrar con el Explorador de Windows es una porquería porque pierde mucho tiempo enumerando los archivos. Normalmente muevo las cosas que necesito borrar a C:\stufftodelete y tengo un archivo batch deletestuff.bat a rmdir /s/q C:\stufftodelete. Esto está programado para ejecutarse por la noche, pero a veces necesito ejecutarlo durante el día, así que cuanto más rápido mejor.

Aquí están los resultados de una prueba rápida de tiempo de una pequeña muestra de 5,85 MB de 960 archivos en 303 carpetas. Ejecuté el método 1 seguido del método 2, y luego reinicié los directorios de prueba.

El método 1 elimina los archivos y la estructura de directorios en una sola pasada:

rmdir /s/q foldername

El método 2 tiene una primera pasada para eliminar archivos y salidas a nul para evitar la sobrecarga de escribir en pantalla para cada archivo. Una segunda pasada limpia la estructura de directorios restante:

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

Aquí están los resultados de otra prueba utilizando 404 MB de 19.521 archivos en 3.243 carpetas:

  • Método 1: 2 minutos 20 segundos
  • Método 2: 2 minutos 33 segundos

Así que no hay mucho en ello, probablemente demasiado cerca para juzgar en una sola prueba.

  • *

Editar: He vuelto a probar con muchos más datos, este es un caso típico para mí: 28,3 GB de 1.159.211 archivos en 146.918 carpetas:

  • Método 1: 2h 15m, 2h 34m: media: 2 horas 25 minutos
  • Método 2: 49m, 57m: media: 53 minutos

¡Vaya, el método 2 es casi tres veces más rápido que el método 1! ¡Voy a actualizar mi deletestuff.bat!

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

Si tiene que borrar grandes árboles de directorios con regularidad, considere la posibilidad de almacenar la raíz de ese árbol de directorios en una partición separada, y luego simplemente formatearla rápidamente cada vez que necesite borrar todo. Si necesita automatizar esto, puede utilizar este comando del DOS:

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

donde Z: es su partición “volátil”. Nota: la partición no debe tener ninguna etiqueta. Ya escribí sobre esto aquí .

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

En la línea de comandos (Inicio -> Ejecutar -> cmd):

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

Además de copiar/mover archivos muy rápido (usando su propia API), TeraCopy puede borrar archivos y es muy rápido también. Desde que descubrí TeraCopy no uso un ordenador sin él instalado (si voy a copiar/mover/borrar).

El mismo instalador instala la edición x64 pero para usarla hay que forzarla manualmente.

La beta que recomiendo sobre las versiones estables: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/

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

Hice un archivo bat que hace lo mismo.

@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

hace el trabajo en dos pasos, uno, intenta borrar los archivos. Y el segundo es tratar de tomar la propiedad de los archivos. **El valor de la propiedad de los archivos debe ser cambiado de acuerdo a su local (significa “yes” en inglés). Si falla la tarea (por ejemplo, si falla por el permiso) entonces debe ejecutarla de nuevo. Sin embargo, la segunda ronda no intentará borrar los archivos eliminados en la primera ronda, por lo que podría ser bastante rápido.

  • *

Cómo usarlo. Guarda como delfolder.bat en una ruta de acceso (por ejemplo c:\windows), luego ejecútalo como

delfolder "foldername"

donde foldername es el nombre de la carpeta

En mi prueba, borrar 123'000 archivos tomó 3 minutos (sata 7200rpm). ¡¡¡YY!!!

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

A mí me suele funcionar bien el siguiente código.

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

Utilice el comando rd /s desde la línea de comandos.

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

La mejor solución práctica es probablemente mover la carpeta fuera del camino en algún lugar (por ejemplo, la papelera de reciclaje) y luego empezar a borrarla. Tardará mucho, pero al menos estará fuera del camino.

Estoy bastante seguro de que el tiempo requerido para borrar todos esos archivos es un requisito inherente a la tarea, no una ineficiencia en la implementación del borrado.

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

Instala Cygwin y usa rm -r. Pero es probable que eso sea una exageración.

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

¿Tiene activada la generación de nombres cortos de archivos? Si es así, ¿realmente lo necesita? Eliminar un archivo es sólo una operación de metadatos. Así que si tienes el doble de nombres que eliminar, la cantidad de trabajo es significativamente mayor.

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

La respuesta de Hugo es la más rápida pero no elimina los archivos ocultos o de sistema en la primera pasada, así que si quieres una solución más completa utiliza el parámetro /a:

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

Sobre el archivo BAT de Magallanes , ten mucho cuidado con takeown e icacls, porque los hardlinks comparten los mismos permisos y propietarios, así que si hay hardlinks no saturados en la carpeta que quieres eliminar, usar takeown e icacls cambiará los permisos y propietarios de los archivos fuera de la carpeta.

Usando la herramienta ln.exe puede listar todos los ficheros hardlinked dentro de la carpeta y saber si están hardlinked a ficheros fuera de la carpeta (unsaturated hardlinks):

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

¿Has probado alguna de estas dos aplicaciones?

Asegúrese de poner el número de sobreescrituras a 0 si quiere un rendimiento más rápido. Hágalo haciendo clic en opciones y luego cambie el valor en la parte inferior del diálogo.

Introduzca la ruta a eliminar en el campo Fuente y luego haga clic en Eliminar.

Estas aplicaciones no ponen los archivos en la papelera de reciclaje. Utilícelas con cuidado.

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

Esto se proporciona para complementar y aumentar los pasos dados en las respuestas mencionadas anteriormente.

Los dos métodos anteriores parecen bastante eficaces, pero sería difícil determinar el rendimiento a menos que se comparen con las mismas condiciones exactas:

  • Dispositivo y modelo de disco duro físico
  • Preferiblemente, ATTO/Crystal Disk evaluado antes de clonar los datos en ellos
  • Misma ubicación y geometría de partición/volumen
  • La forma de hacerlo sería desfragmentar la partición/carpetas de muestra y clonarlas exactamente como si fueran 2 tipos de discos duros (del paso anterior)
  • Luego ejecutar las configuraciones a través de un archivo por lotes y utilizar el cmdlet de Powershell para registrar y medir su rendimiento.

  • Las siguientes son algunas carpetas de muestra (nombradas como tamaño total) con las que experimenté pero no pude obtener ningún rendimiento / resultado concluyente.

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • Habría publicado los archivos de registro de salida, pero creo que la variación es enorme debido a los tamaños y la distribución de los archivos de las carpetas, 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

Borrar una carpeta es más rápido que borrar varios archivos.

Así que si prefieres usar el ratón en lugar de la línea de comandos, puedes crear un directorio, mover los archivos allí y borrarlo (con Shift+Del como has dicho).