Tworzenie katalogów twardych linków w MacOS X? [duplikat]

To pytanie ma już odpowiedź tutaj:

Jak utworzyć twarde łącze do katalogu w systemie OSX?

Ta funkcja została dodana do ich systemu plików w 10.5 (Dla time machine), ale nie mogłem znaleźć żadnych informacji na temat jej używania z wiersz poleceń.

Author: Felix Geisendörfer, 2009-09-16

4 answers

Niestety Apple uszkodziło komendę {[2] }. Możesz użyć następującego programu do utworzenia twardego łącza do katalogu:

#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;
}

Weź pod uwagę, że twardo połączone katalogi mogą nie znajdować się w tym samym katalogu nadrzędnym, więc możesz to zrobić:

$ gcc hlink.c -o hlink
$ mkdir child1
$ mkdir parent
$ ./hlink child1 parent/clone2
 65
Author: Freeman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-10 11:32:58

Dodałem sugerowaną odpowiedź do git rep jeśli ktoś jest zainteresowany: https://github.com/selkhateeb/hardlink

Po zainstalowaniu Utwórz twardy link za pomocą:

hln source destination

Zauważyłem również, że unlink komenda nie działa na snow Leopardzie, więc dodałem opcję odłączenia:

hln -u destination

Aby zainstalować Hardlink, użyj homebrew i uruchom:

brew install hardlink-osx
 78
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-10 21:06:29

W odpowiedzi na pytanie the_undefined o to, jak usunąć twarde łącze do katalogu bez usuwania zawartości innych katalogów, do których jest połączone: o ile mogę powiedzieć, nie można tego zrobić z linii poleceń za pomocą wbudowanych poleceń. Jednak ten mały program (zainspirowany postem Freemana) zrobi to: {]}

#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;
}

Idąc za przykładem Freemana,

$ gcc hunlink.c -o hunlink
$ echo "foo bar" > child1/baz.txt
$ ./hunlink parent/clone2

Usunie hardlink z parent / clone2, ale opuści katalog child1 i plik child1 / baz.tylko txt.

 17
Author: rleber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-13 21:36:38

Innym rozwiązaniem jest użycie bindf https://code.google.com/p/bindfs/ który można zainstalować przez port:

sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir
 6
Author: Kit Sunde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-12 21:41:45