Frage

Ich habe einen Perl-Skript, das ein Verzeichnis mit all seinem Inhalt löschen muss. Manchmal enthält dieses Verzeichnis einen Verbindungspunkt in ein anderes Verzeichnis. Wenn ich ganz naiv rmtree(), wird der rmtree() Ruf auch alle Dateien im Zielordner des Übergangs löschen. Ich bin für einen Weg suchen, um nicht das zu tun, und stattdessen nur die Verbindung entfernen.

Nicht Perl-Lösungen auch anerkannt werden würde.

War es hilfreich?

Lösung

I „Verbindungspunkt“ in Google gerade eingegeben und fand meinen Weg zu http://en.wikipedia.org/wiki/NTFS_junction_point

  

Eingabeaufforderung (cmd.exe)

     
      
  • Die dir   Befehl in Windows 2000 oder höher   erkennt Knotenpunkte, die Anzeige    statt in   Verzeichnislisten (Verwendung dir mit der   / A oder / AL-Befehlszeilenschalter).
  •   
  • Alle   dass Befehle normalerweise beeinflussen   Dateien in einem normalen Verzeichnis   wirken hier das gleiche. So der Befehl   del myjunction sollten nicht verwendet werden -   dies wird einfach löschen Sie alle Dateien in   das gezielte Verzeichnis.
  •   
  • Die Befehle   rmdir und Bewegung gut funktionieren mit   Kreuzungen, mit dem Vorbehalt, die sich bewegen   wird nicht die Verbindung zu einem anderen bewegen lassen   Volumen (im Gegensatz zu Windows-   Explorer, wie oben erwähnt).
  •   
  • Die   rmdir Befehl ist sicher, dass es nur   löscht den Verbindungspunkt, nicht die   gezielte Dateien. Während der Wanderung durch   das Verzeichnis mit der Kommandozeile   Schnittstelle, Dateien gelöscht werden können, aber   im Gegensatz zu Explorer können Verzeichnisse auch   werden gelöscht (mit rmdir / s dirname für   Beispiel).
  •   
  • Mit dem Befehl linkd mit   die / d ist eine sichere Art und Weise zu löschen   Knotenpunkte.
  •   

Von dem, was ich sehen kann, kann man zum Beispiel dir verwenden und die Ausgabe für <JUNCTION> grep oder den Windows-rmdir verwenden. Ich denke, man entweder davon aus Perl über system verwenden kann.

Andere Tipps

Um herauszufinden, wo die Analysepunkte sind (oder „Knotenpunkte“, wenn man so will):

dir /a:l /b > myjunctions.txt

Werden alle Analysepunkte im aktuellen Verzeichnis angezeigt. Sie können / s hinzufügen, aber Vorsicht, dass die Analysepunkte innerhalb Analysepunkte werden ebenfalls aufgeführt werden.

Angenommen myjunctions.txt enthält die Zeile x: \ subdir \ foo. Um sie zu entfernen, können Sie ausgeben

fsutil reparsepoint "x:\subdir\foo"

Und voilá! Ihr Verbindungspunkt ist weg, und das ursprüngliche Verzeichnis ist unangetastet!

Fastcopy-Dienstprogramm tut dies: http://ipmsg.org/tools/fastcopy.html.en

Ich bin mit diesem Programm zum Kopieren oder Löschen von Ordnern, die Kreuzungen als Unterordner enthalten kann, so dass die Verbindungsziele unberührt bleiben. Die Knotenpunkte werden während des Kopierens richtig kopiert, auch wenn das Ziellaufwerk ist anders.

Windows Explorer zumindest in Windows 7 Ultimate arbeitet auch als wollte beim Löschen - Kreuzung Ziele bleiben intakt.

Aber das Kopieren von Ordnern, die Kreuzungen als Unterordner in Explorer enthalten noch nicht wie vorgesehen funktionieren - es tut wirklich etwas, das kann ich noch nicht vielleicht ganz vollständig beschreiben: die Kreuzung Ordner erscheinen als normale Ordner kopiert werden, aber ihr Inhalt ist leer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top