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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top