¿Cuál es la mejor manera de eliminar 100,000 archivos de un directorio de Windows?


12

Tenía un usuario con más de 100,000 archivos en un solo directorio. La máquina se bloquea y queda inutilizable durante mucho tiempo, mientras que el Explorer llena la memoria y la máquina puede fallar. ¿Hay una manera simple de volcar el directorio y los contenidos? Intentamos usar la línea de comando deltree y esto no parecía mucho mejor.

DaveF

Extra -

Hemos tenido este problema varias veces con el mismo usuario (en realidad cliente). Un programa crea cientos de miles de archivos temporales durante su ejecución. Si el programa funciona correctamente, no importa, ya que se eliminan disminuyendo la velocidad al terminar con esto. Pero de vez en cuando muere dejando el desorden de los archivos. Hemos intentado usar los métodos rmdir y del etc. y son más rápidos que usar el explorador, pero generalmente terminamos con los mismos problemas. La partición se daña, hay un archivo bloqueado inexplicable, algunos archivos tienen un problema de permiso, lo que impide que la eliminación funcione. Normalmente, este problema se puede solucionar con un reinicio, pero en este caso, ya que este es un sistema crítico, no podemos hacerlo en tiempo de producción. En Unix puedes hacer un rm -rf, etc. y esto es rápido y generalmente no hay ningún problema real con él.

Por cierto, la aplicación se está cambiando pero esto no entrará en producción por algún tiempo y pensé que este problema probablemente era interesante para otros.

Actualización: debido a que tenemos MKS Nutcracker en el sistema (sin las utilidades de la línea de comandos) conseguimos que el programador genere un rm simple. Esto es varias órdenes más rápido que del / deltree, etc. Me parece extraño que no haya una aplicación tan simple disponible como una herramienta de administración estándar del sistema de Windows.


Respuestas:


15

Podrías usar rmdir:

rmdir /s /q FOLDERNAME

Banderas: /ssignifica eliminar de forma recursiva, /qes el modo "silencioso".


Intentamos esto, agregaré más a la pregunta.
David Allan Finch

Esto debería haberte funcionado. Funcionó ?
s_ruchit

Sí, sobre todo, he agregado los problemas que hemos visto anteriormente en la pregunta Gracias por tu comentario.
David Allan Finch

Voy a aceptar esta respuesta. Pero hay una mejor solución que consiste en utilizar una rm de estilo Unix más simple, pero como no es accesible para la mayoría de los usuarios, esta es la mejor opción para el 99% de los usuarios. Debe haber un estilo de rm de Unix implementado para Windows que no haga nada más que eliminar recursivamente. Por cierto, nuestros programadores MKS remove_tree (ver más arriba) golearon de rmdir, por lo que el problema no es Windows sino las aplicaciones integradas.
David Allan Finch

6

Solía ​​tener este problema con los servidores que administraba. Omita el explorador por completo y use el símbolo del sistema. Navegue a la carpeta y "del " .

De esta manera, evita la sobrecarga de la GUI (el explorador es basura) y la papelera de reciclaje.


Intentamos esto, agregaré más a la pregunta.
David Allan Finch

4

A menos que necesite esto para aplicaciones heredadas de 16 bits, intente aumentar el rendimiento deshabilitando la generación de nombres de archivos cortos. Esto puede tener un impacto significativo en las operaciones de directorio con gran cantidad de archivos.

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

Luego use:

Ruta RMDIR / S / Q [unidad:]

para eliminar el directorio con todos sus archivos.


Eso es interesante saberlo.
David Allan Finch


3

¿Qué hay de mover esa carpeta temporal a una unidad / partición diferente? En lugar de eliminar toda la basura, puede formatear la unidad (GUI o línea de comando). Con el formato rápido, esto debería ser razonablemente rápido.


1
Intentamos esto y, a veces, no lo permitía. El cliente ahora ejecuta el programa en un directorio diferente cada vez.
David Allan Finch

Cree un enlace duro entre la ruta y la unidad, es decir: el enlace duro "c: \ mi aplicación tonta \ donde se almacenan los archivos" señala la unidad X: en un lote de inicio
Nime Cloud

2

Esta es una combinación de las publicaciones anteriores.

abrir una ventana de comando:
File -> Run -> cmd

Eliminar el directorio
rmdir /s /q FOLDERNAME

O

Eliminar un patrón de archivos
cd \....\directory
del *.[something]

Como ha notado en su pregunta, el Explorador de Windows realmente puede ralentizar las cosas.

Después de ver su actualización, tengo uno propio.
Consulte esta lista de eliminadores de archivos


Me di cuenta de esto con solo varios cientos de archivos en el pasado, es una pena que se pueda hacer que el explorador lo haga tan rápido como las aplicaciones de línea de comandos: podríamos hacer que el cliente lo haga por sí mismo. Gracias por tu respuesta.
David Allan Finch

1

No tengo nada mejor que del y rm, pero incluso si tardan mucho tiempo, no debería provocar daños en la partición. Los archivos bloqueados pueden deberse a que el programa que los creó murió inesperadamente.

A veces, aunque los archivos no se pueden eliminar, se pueden mover a otro subdirectorio temporal. Solo creo un subdirectorio _todel y los muevo allí. Por lo general, funciona mejor si muevo todo el directorio un nivel hacia arriba, en lugar de los archivos en sí.

Aparte de eso, la única forma de hacer que las eliminaciones sean más rápidas es desfragmentar el disco duro. Una solución temporal puede ser mover este directorio a un recurso compartido de samba o usar una unión NTFS a un disco duro USB portátil. (Una pequeña partición sería mejor y más rápida que usar todo el disco duro). Luego puede expulsar el disco duro y formatear rápidamente en otra PC.


Eso es lo que pienso: es decir, los archivos dañados, pero ¿por qué el núcleo de NT no los cierra? La velocidad es un problema con el programa, por lo que no se puede utilizar Samba o un disco duro USB. Pero se ha sugerido al cliente que cree una partición separada para cada ejecución y que vuelva a formatear. No estoy seguro si ya lo han intentado. - Gracias
David Allan Finch

1

¿Una partición dañada por eliminar archivos? Ese es un problema importante con el disco, independientemente de la cantidad de archivos que se eliminen.

Intentaría eliminar la línea de comando y eliminar la mayor cantidad posible hasta que encuentre una que esté bloqueada. Luego use Process Explorer para encontrar qué proceso tiene ese archivo abierto. Elimine ese proceso (si puede), y luego vuelva a eliminar. Enjuague, repita :)


Me gustaría probar esto, pero no tenemos acceso directo a la máquina y la aplicación ha muerto. Gracias de cualquier manera.
David Allan Finch

1

Reinicie usando un CD de Linux 'Live', el rm -rf


No podemos simplemente reiniciar este servidor, ya que es crítico para el cliente, pero gracias por la respuesta.
David Allan Finch

1

Un poco hacky, pero puedes crear una secuencia de comandos que elimine los archivos, no sé el formato, pero suponiendo que sean archivos que comienzan con las letras az, puedes hacer

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

cambie deltree con el método de eliminación que prefiera. probablemente sea más lento, pero menos propenso a errores?

nota al margen: también puede intentar instalar cygwin para obtener comandos como rm que probablemente continúen eliminando archivos incluso después de que encuentre un error con un archivo.


Esto se intentó pero realmente no resolvió el problema, gracias de todos modos.
David Allan Finch

También tenemos instalado MKS Nutcracker, pero por razones de seguridad, las utilidades de línea de comandos se eliminaron, no es una elección. Pero lo que hemos hecho está escrito propio rm y esto funciona.
David Allan Finch

1

Los diversos métodos sobre todo funcionan. Si tiene Cygwin cargado en una memoria USB, puede enchufarlo a su USB local, encender su shell Cygwin y ejecutar el comando RM como se menciona arriba. Esta es una forma práctica de mantener a la mano la flexibilidad de Unix.


Esta es una solución razonable cuando administra el sistema.
David Allan Finch

1

También puede iniciar en la consola de recuperación, o algo por el estilo. Eso debería ignorar por completo cualquier problema extraño con el sistema operativo.


Lo sentimos, no podemos reiniciar el servidor, pero gracias por la respuesta.
David Allan Finch

1

Monte la carpeta desde una máquina Linux y realice la eliminación recursiva desde allí.

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

# rm /mnt/tobedeleted/* -R

Incluso podría usar un trabajo cron para eliminar los archivos a intervalos regulares.


has intentado esto?
David Allan Finch

1

¿Por qué no simplemente usar robocopy y duplicar un directorio vacío?

Simplemente cree una carpeta vacía y luego use:

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

0

Si ninguna de las otras sugerencias está funcionando, ¿ha considerado acelerar su E / S?

Compre mejores controladores, discos más rápidos.

O me pregunto, si los archivos son temporales (como implica) y los tamaños lo permiten, ¿podría agregar RAM adicional a la caja (barata) y configurar un disco RAM?

En el mejor de los casos, el rendimiento no se degradaría al eliminar grandes volúmenes de archivos. En el peor de los casos, un reinicio eliminaría la partición.


Me encanta, pero no creo que el cliente vaya a pagar ya que esperan una nueva versión del programa, gracias por la respuesta.
David Allan Finch

La RAM del servidor en el Reino Unido actualmente es de aproximadamente 10 GBP por gigabyte.
tomfanning

Es cierto, pero el cliente paga X por la máquina (de una cotización) y no ve ninguna razón para gastar Y más.
David Allan Finch

¿Porque el servidor especificado no hace el trabajo lo suficientemente bien?
tomfanning 01 de

Es lo suficientemente bueno para el trabajo. El problema es que el programa tiene un error que está en proceso de reparación. No van a gastar más dinero.
David Allan Finch

0

Intente cortarlo y pegarlo en la papelera de reciclaje, debe evitar intentar mover cada archivo. Sin embargo, no estoy seguro de qué va a hacer para vaciar el contenedor porque probablemente revisará todos los archivos.


Creo que el cliente intentó esto y no fue mucho mejor que usar Explorer normalmente. Gracias
David Allan Finch

0

¿Eliminar con SHIFT + DEL hace alguna diferencia en cuanto a la velocidad?


Cuando lo intenté por última vez, fue casi lo mismo.
David Allan Finch

De hecho, acabo de intentarlo de nuevo, con una instalación antigua y todavía estoy esperando. Probablemente me rendiré y usé el MKS rm.
David Allan Finch
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.