Wie erstellt man in OS X einen Hardlink (im Gegensatz zu einem Symlink oder einem Mac OS-Alias), der auf ein Verzeichnis verweist? Ich kenne bereits den Befehl "ln target destination", aber der funktioniert nur, wenn das Ziel eine Datei ist. Ich weiß, dass Mac OS im Gegensatz zu anderen Unix-Umgebungen Hardlinks zu Ordnern zulässt (dies wird z. B. für Time Machine verwendet), aber ich weiß nicht, wie ich es selbst machen kann.
Antworten
Zu viele Anzeigen?Die OSX-Version von ln
kann es nicht, aber, wie in der anderen Antwort von reich ist es möglich, mit der GNU-Version von ln
die erhältlich ist in selbstgebaut como gln
als Teil der coreutils Formel. man gln
listet die -d
mit der OSX-spezifischen Warnung, die in reich Antwort. Mit anderen Worten: Es funktioniert nicht in allen Fällen. Was genau darüber entscheidet, ob es funktioniert oder nicht, scheint nirgendwo dokumentiert zu sein.
Als Voraussetzung müssen Sie Folgendes installieren coreutils
:
brew install coreutils
Das können Sie jetzt tun:
sudo gln -d /original_folder /mirror_folder
WICHTIG : Um den Hardlink zu entfernen, müssen Sie muss verwenden. gunlink
:
sudo gunlink /mirror_folder
Verwendung von
rm
oder Finder löscht auch den ursprünglichen Ordner.
Zu Ihrer Information: Die coreutils homebrew formula stellt die GNU-kompatiblen Versionen der allgemeinen Unix-Werkzeuge bereit. Verwenden Sie brew list coreutils
um die vollständige Liste zu sehen.
Ab 2018 nicht mehr möglich. APFS (eingeführt in MacOS High Sierra 10.13) ist nicht mit Verzeichnis-Hardlinks kompatibel. Siehe https://github.com/selkhateeb/hardlink/issues/31
In meinem Fall habe ich festgestellt, dass ich von einer virtuellen Windows-Maschine aus keine Symlinks verfolgen kann. (Ich wollte einige HTML-Seiten im Internet Explorer testen). Und meine Verzeichnisstruktur hatte Symlinks für CSS- und Bilder-Ordner.
Ich habe das Problem mit einem anderen Ansatz gelöst, als die anderen Antworten vermuten ließen. Ich verwendete rsync
um eine Kopie des Ordners zu erstellen. Rsync kann die Symlinks auflösen und stattdessen die verknüpften Dateien kopieren.
Dies löste mein Problem, ohne harte Links zu Verzeichnissen zu verwenden. Und es ist tatsächlich eine einfache Lösung, wenn man nur an einer kleinen Anzahl von Dateien arbeitet.
rsync -av --copy-dirlinks --delete ../htmlguide ~/src/
Eine andere Lösung ist die Verwendung von bindfs https://code.google.com/p/bindfs/ das über Port installiert werden kann:
sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir