
Gibt es eine Möglichkeit, Hardlinks zu erstellen, um ein Duplikat eines Ordners auf dem GLEICHEN Laufwerk (NTFS-formatiert) zu erstellen? Ich möchte so etwas tun: XCOPY E:\TEMP\SAMPLE1* E:\TEMP\SAMPLE2\ /s, aber STATT die Dateien tatsächlich zu kopieren und den zusätzlichen Laufwerksspeicherplatz zu verbrauchen, werden einfach Hardlinks zu den Dateien erstellt.
Ziel: Es gibt nur eine Handvoll Dateien, die wir im Ordner SAMPLE2 nicht benötigen, die wir aber alle in SAMPLE1 behalten möchten. Der Ordner SAMPLE2 wird schließlich auf ein anderes Laufwerk kopiert.
HINWEIS: Der Gesamtinhalt von SAMPLE1 beträgt ungefähr 400 GB (mit mehreren darin enthaltenen Unterordnern) und jede der Dateien, die wir aus SAMPLE2 ausschließen, ist ungefähr 20–40 MB groß (es gibt viele, über 100 Dateien, die sich in verschiedenen Unterordnern befinden).
Gibt es also eine Möglichkeit, das Äquivalent von XCOPY (Befehl oben) auszuführen, außer dass Hardlinks verwendet werden. Anschließend entfernen wir alle Dateien, die wir nicht in SAMPLE2 haben möchten, bevor wir sie auf das externe Laufwerk kopieren und anschließend den Ordner SAMPLE2 löschen?
Antwort1
Es ist ein bisschen ein Hack, aber:
- Erstellen Sie mit der GUI eine normale vollständige Kopie. Kopieren/Einfügen usw. Beobachten Sie, wie Ihr Speicherplatz verschwindet.
- Führen Sie DupeGuru mit der als Referenz festgelegten Quelle und dem Duplikat als „normal“ aus.
- Wenn der Bericht abgeschlossen ist, führen Sie „Alles auswählen > löschen“ aus und aktivieren Sie die Option „Als Hardlinks neu erstellen“. Es können auch Symlinks erstellt werden. Sie sollten etwas Speicherplatz freigeben. Ich verwende dies manchmal, um einen Ordner zum Hochladen vorzubereiten, nachdem ich mit einem Skript viele andere Dateien in der Struktur gelöscht habe.
BONUS: Es läuft auf Mac, Windows und Linux. Toll!https://dupeguru.voltaicideas.net/
Antwort2
Keine Drittanbietersoftware erforderlich. Dies kann erreicht werden mitPower Shell. Hier ist eine pipelinefähige Funktion, die einen Quellpfad ($Path) und einen „Spiegel“-Pfad ($MirrorPath) verwendet. Sie füllt den Spiegelpfad mit Hardlinks zu Dateien im Quellpfad und Unterordnern, die den Quellunterordnern entsprechen, die ebenfalls rekursiv gefüllt werden.
Function Mirror-Path {
Param(
[Parameter(Mandatory,ValueFromPipeline,Position=0)]
[String[]]
$Path,
[Parameter(Mandatory,Position=1)]
[String]
$MirrorPath
)
Begin{
If ( ! ( Test-Path $MirrorPath )) {
mkdir $MirrorPath -Force | out-null
}
}
Process{
ForEach ( $Target in $Path ) {
If ( Test-Path $Target ) {
Resolve-Path $Target | gci -File | ForEach {
New-item -ItemType Hardlink -Path $MirrorPath -Name $_.Name -Target $_.FullName | out-null
}
Resolve-Path $Target | gci -Directory | ForEach {
Mirror-Path $_.FullName ( Join-Path $MirrorPath $_.Name )
}
}
Else {
Echo "'$Target' is not a valid path."
}
}
}
End {}
}
Antwort3
Theoretisch ist das ganz einfach. Sie müssen einen symbolischen Link des/der Verzeichnisse(s) erstellen, der GENAU das tut, was Sie wollen. Er kopiert Verknüpfungen, die für den Benutzer und die Programme wie echte Dateien aussehen und sich auch so verhalten. Dann können Sie die symbolischen Links löschen, die Sie nicht mehr wollen, wodurch nur die Links gelöscht werden; dann kopieren Sie den Rest der „Dateien“ (eigentlich Links) wie gewohnt und es werden die eigentlichen Dateien kopiert.
Aber Windows ist GUI-basiert und es gibt keine integrierte GUI-Lösung zum Erstellen symbolischer Links. Auch die Eingabeaufforderung machte es schwierig. (Wenn Sie Linux verwenden, ist es über das Terminal einfach und unkompliziert, und einige grafische Dateimanager wie GNOME Commander machen es auch über die GUI einfach.)
Also... um die obige Lösung auszuführen, besteht der „einfache“ Weg darin, ein Plug-In und eine Support-Datei herunterzuladen (falls erforderlich; lesen Sie die Download-Hinweise).Hier Dadurch werden Ihrem Rechtsklickmenü symbolische Linkoptionen hinzugefügt. Sie benötigen „Linkquelle auswählen“, um das Verzeichnis zu „kopieren“, und dann „Ablegen unter > Hardlink-Klon“, um es einzufügen. Arbeiten Sie im verknüpften Verzeichnis wie gewünscht und löschen Sie Dateien (Links) usw. Kopieren Sie es dann ganz normal und fügen Sie es ein (NICHT „Link auswählen und ablegen unter“), wo immer Sie möchten, und voilà, die Verknüpfungen werden als Dateien kopiert!
Löschen Sie abschließend den verknüpften Ordner und es ist, als wäre nichts passiert.
Das Plugin scheint großartig zu funktionieren. Probieren Sie es aus! Achten Sie nur darauf, NUR Hardlinks zu erstellen (keine Softlinks oder Junctions) und arbeiten Sie unbedingt mit den Links und nicht mit den echten Dateien!
Für diejenigen, die mklink erwähnen, hier ist, was mir beim Entwickeln dieser Antwort begegnet ist. Die Verwendung von mklink über die Eingabeaufforderung als Administrator (suchen Sie nach CMD, klicken Sie mit der rechten Maustaste und führen Sie es als Administrator aus) SOLLTE genauso funktionieren ... Aber bei mir (und VIELEN anderen, wenn Sie suchen) hat es nicht funktioniert. Mir wurde der Zugriff verweigert, selbst nachdem ich die Berechtigungen über secpol.msc geändert hatte. Es scheint ein weit verbreitetes Problem zu sein.
Antwort4
Link Shell-Erweiterung
Dieses Dienstprogramm fügt dem Kontextmenü des Windows Explorers eine Shell-Erweiterung hinzu und ermöglicht die Erstellung vonHardlinks,KreuzungenUndSymlinks. Es ist wirklich alt, wurde erstmals 1999 erstellt, wird aber immer noch aktualisiert und funktioniert immer noch wie erwartet. Ich glaube, dies ist die benutzerfreundlichste Lösung.