¿Cómo puedo eliminar un directorio de Windows sin los puntos de unión?
Pregunta
Tengo un script en Perl que necesita para eliminar un directorio con todo su contenido.
A veces, este directorio contiene un punto de unión a otro directorio. Si rmtree()
ingenuamente, la llamada rmtree()
también eliminará todos los archivos dentro de la carpeta de destino de la unión. Estoy buscando una manera de no hacer eso, y en lugar de simplemente eliminar la unión.
No Perl.
Solución
Me acaba de escribir "punto de unión" en Google y encontré mi camino a http://en.wikipedia.org/wiki/NTFS_junction_point
Símbolo del sistema (cmd.exe)
- El dir comandos en Windows 2000 o posterior reconoce los puntos de unión, mostrando en lugar de los listados de directorios (dir con el uso / A o / AL modificador de línea de comandos).
- Cualquier Los comandos que afectaría normalmente archivos dentro de un directorio normal actuar de la misma aquí. Por lo tanto el comando del myjunction no debe utilizarse - esto sólo eliminar todos los archivos de el directorio de destino.
- Los comandos rmdir y fino trabajo de movimiento con uniones, con la salvedad de que se mueven no permitirá que el movimiento de unión a otro volumen (en contraposición a Windows Explorer, como se mencionó anteriormente).
- La comando rmdir es seguro, ya que sólo borra el punto de unión, no el archivos específicos. Mientras que caminar a través de el directorio con la línea de comandos interfaz, los archivos se pueden eliminar, pero a diferencia de explorador, los directorios pueden también suprimirse (usando rmdir / s dirname para ejemplo.)
- Uso del comando con Linkd el modificador / d es una forma segura de eliminar puntos de unión.
Por lo que puedo ver que puede, por ejemplo, utilizar dir
y grep la salida de <JUNCTION>
o utilizar el rmdir
de Windows. Creo que se puede utilizar cualquiera de estos de Perl a través system
.
Otros consejos
Para saber dónde están los puntos de análisis (o "puntos de unión", si se quiere):
dir /a:l /b > myjunctions.txt
mostrará todos los puntos de análisis en el directorio actual. Puede añadir / s, pero ten en cuenta que los puntos de análisis dentro de los puntos de análisis se enumeran también.
myjunctions.txt Supongamos que contiene la línea x: \ subdirectorio \ foo. Para eliminarlo, se emite
fsutil reparsepoint "x:\subdir\foo"
y listo! Su punto de unión se ha ido, y el directorio original es intacto!
FastCopy utilidad hace esto: http://ipmsg.org/tools/fastcopy.html.en
Estoy utilizando este programa para copiar o borrar carpetas que pueden contener uniones como subcarpetas de manera que los objetivos de unión permanecen intactas. Los puntos de unión están correctamente copiados durante la copia, incluso cuando la unidad de destino es diferente.
Explorador de Windows, al menos en Windows 7 Ultimate funciona también como quería mientras borra - dianas de unión permanecen intactos.
Sin embargo, la copia de las carpetas que contienen uniones como subcarpetas en el Explorador todavía no funciona como se esperaba - lo que realmente hace algo que no puedo describir Sin embargo, quizá bastante completo: las carpetas de unión parecen ser copiado como carpetas normales, pero su contenido está vacía.