it-swarm.dev

Eliminación masiva de archivos en Windows

Tengo un directorio, que contiene ~ 3 millones de archivos en ciertos subdirectorios en un servidor Windows 2008. La eliminación manual de los archivos mediante SHIFT + DEL en el directorio raíz lleva siglos. ¿Hay alguna otra manera de hacer la eliminación en unmás rápidoforma?

139
aaginor

Regularmente necesito eliminar muchos archivos y directorios de una unidad cifrada con WinXP, por lo general alrededor de 22 GB de 500,000 archivos en 45,000 carpetas.

Eliminar con el Explorador de Windows es una basura porque desperdicia mucho tiempo en la enumeración de los archivos. Normalmente muevo las cosas que necesito eliminar a C:\stufftodelete y tengo un archivo por lotes deletestuff.bat a rmdir /s/q C:\stufftodelete. Está programado para ejecutarse por la noche, pero a veces necesito hacerlo durante el día para que cuanto más rápido mejor.

Aquí están los resultados de una prueba de Quick Time 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, 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 un primer paso para eliminar archivos y salidas a nul para evitar la sobrecarga de escritura en la pantalla para cada archivo individual. Una segunda pasada limpia el resto de la estructura del directorio:

del /f/s/q foldername > nul
rmdir /s/q foldername
  • Método 1: 17.5s, 14.9s, 13.9s, 14.8s, 13.8s: promedio 14.98 segundos
  • Método 2: 14.3s, 12.1s, 11.7s, 14.2s, 11.8s: promedio 12.82 segundos

Aquí están los resultados de otra prueba con 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.


Edit: 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: promedio: 2 horas 25 minutos
  • Método 2: 49m, 57m: promedio: 53 minutos

¡Wow, el método 2 es casi tres veces más rápido que el método 1! Estaré actualizando mi deletestuff.bat!

178
Hugo

Si tiene que eliminar con frecuencia los grandes árboles de directorios, considere almacenar la raíz de ese árbol de directorios en una partición separada, simplemente formatee rápidamente cada vez que necesite eliminar todo. Si necesita automatizar esto, puede usar este comando de DOS:

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

donde Z: es su partición 'volátil'. Nota: la partición no debe tener etiqueta. Hice un blog sobre esto aquí .

18
Mr. Bungle

En el símbolo del sistema (Inicio -> Ejecutar -> cmd):

del /f /s /q foldername 
9
lmsasu

Además de copiar/mover archivos muy rápido (usando su propia API), TeraCopy puede eliminar archivos y también es muy rápido. Desde que descubrí TeraCopy, no uso una computadora sin que esté instalada (si voy a copiar/mover/eliminar).

El mismo instalador instala la edición x64, pero para usarla debes forzarla manualmente.

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

6
rautamiekka

Hice un archivo de bat que hacen 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 eliminar los archivos. Y el segundo es tratar de tomar posesión de los archivos. y debe cambiarse de acuerdo con su local (significa sí en inglés). Si falla la tarea (por ejemplo, si falla porque el permiso), debe ejecutarla nuevamente. Sin embargo, la segunda ronda no intentará eliminar los archivos eliminados en la primera ronda, por lo que podría ser bastante rápido.


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

 delfolder "foldername"   

donde nombre de carpeta es el nombre de la carpeta

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

6
magallanes

Usando el código de abajo usualmente funciona bien para mí.

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
4
Benoit

Use el comando rd/s desde el símbolo del sistema.

3
JP Alioto

La mejor solución práctica es probablemente mover la carpeta a otro lugar (por ejemplo, la Papelera de reciclaje) y luego comenzar a eliminarla. Tomará años, pero al menos estará fuera del camino.

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

2
Ryan Thompson

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

1
CarlF

¿Tiene habilitada la generación de nombre de archivo corto? Si es así, ¿realmente lo necesitas? Eliminar un archivo es solo una operación de metadatos. Por lo tanto, si tiene el doble de nombres que eliminar, la cantidad de trabajo es significativamente mayor.

1
MSalters

¿Has probado alguna de estas dos aplicaciones?

Asegúrese de establecer el número de sobrescrituras en 0 si desea un rendimiento más rápido. Haga esto haciendo clic en las opciones y luego cambie el valor en la parte inferior del cuadro de diálogo.

Ingrese 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. Utilizar con cuidado.

0
Stephen Kellett

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

Los dos métodos mencionados anteriormente parecen ser bastante efectivos, pero determinar el rendimiento sería difícil a menos que estén respaldados por las mismas condiciones:

  • Dispositivo físico de disco duro y modelo
    • Preferiblemente, ATTO/Crystal Disk comparó antes de clonar los datos en ellos
  • Misma partición/ubicación de volumen y geometría
    • La forma de hacerlo sería desfragmentar las particiones/carpetas de muestra y clonarlas exactamente como son 2 exactamente los mismos tipos de unidades de disco duro (del paso anterior)
  • Luego, ejecute las configuraciones a través de Batch File y use el Pdetshell Cmdlet para registrar y medir su desempeño.

    • Lo ideal es agregar algunos mecanismos para evitar cualquier sesgo de almacenamiento en caché debido a la actualidad de una actividad similar.
  • Las siguientes son algunas carpetas de muestra (nombradas como tamaño total) en las que experimenté pero no pude obtener resultados/resultados concluyentes.

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 distribución de archivos de 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
0
Alex S

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

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

Acerca del archivo BAT por Magallanes , tenga mucho cuidado con el despegue y los icacls, porque los enlaces duros comparten los mismos permisos y propietarios, por lo que si hay enlaces duros insaturados en la carpeta que desea eliminar, utilizando takeown y icacls cambiarán los permisos y los propietarios de los archivos fuera de la carpeta.

Usando la herramienta ln.exe puede enumerar todos los archivos enlazados dentro de la carpeta y saber si están vinculados a archivos fuera de la carpeta (enlaces duros insaturados):

ln.exe --enum foldername > HardlinksList.txt
0
liamZ