Erstellen von Verzeichnissen harte Links in Mac OS X [Duplikat
Frage
Diese Frage hat hier bereits eine Antwort:
Wie kann ich einen harten Link zu einem Verzeichnis in Mac OS X erstellen?
Diese Funktion wurde zu ihrem Dateisystem in hinzugefügt Mac OS X v10.5 (Leopard) (für Time Machine), aber ich konnte keine Informationen darüber finden, dass sie sie tatsächlich aus der Befehlszeile verwenden.
Lösung
Leider hat Apple das verkrüppelt ln
Befehl. Sie können das folgende Programm verwenden, um einen harten Link zu einem Verzeichnis zu erstellen:
#include <unistd.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
if (argc != 3) {
fprintf(stderr,"Use: hlink <src_dir> <target_dir>\n");
return 1;
}
int ret = link(argv[1],argv[2]);
if (ret != 0)
perror("link");
return ret;
}
Berücksichtigen Sie, dass sich die hartgesottenen Verzeichnisse möglicherweise nicht im selben übergeordneten Verzeichnis befinden, sodass Sie dies tun können:
$ gcc hlink.c -o hlink
$ mkdir child1
$ mkdir parent
$ ./hlink child1 parent/clone2
Andere Tipps
Ich habe die vorgeschlagene Antwort in einem Git -Repository gebündelt, wenn jemand interessiert ist: https://github.com/selkhateeb/hardlink
Erstellen Sie nach der Installation einen harten Link mit:
hln source destination
Ich habe das auch bemerkt unlink
Der Befehl funktioniert nicht unter Mac OS X V10.6 (Schneeleopard). Daher habe ich eine Option zum Verenden hinzugefügt:
hln -u destination
Um Hardlink zu installieren, verwenden Sie Homebrew und Renn:
brew install hardlink-osx
In der Antwort auf die Frage von The_undefined, wie Sie einen Hardlink in ein Verzeichnis entfernen können, ohne den Inhalt anderer Verzeichnisse zu entfernen, mit denen er verknüpft ist: Soweit ich das beurteilen kann, kann dies nicht aus der Befehlszeile mit gebauten Befehlen durchgeführt werden . Dieses kleine Programm (inspiriert von Freemans Post) wird dies jedoch tun:
#include <unistd.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
if (argc != 2) {
fprintf(stderr,"Use: hunlink <dir>\n");
return 1;
}
int ret = unlink(argv[1]);
if (ret != 0)
perror("unlink");
return ret;
}
Freemans Beispiel weitermachen,
$ gcc hunlink.c -o hunlink
$ echo "foo bar" > child1/baz.txt
$ ./hunlink parent/clone2
Entfernen Sie den Hardlink bei übergeordnetem/klone2, verlassen Sie das Verzeichnis jedoch child1
und die Datei child1/baz.txt
allein.
Eine andere Lösung ist die Verwendung von Bindfs https://code.google.com/p/bindfs/ die über Port installierbar ist:
sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir