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.

también serían apreciados soluciones

No Perl.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top