Создание жестких ссылок каталога в MacOS X? [дубликат]


этот вопрос уже есть ответ здесь:

  • Что такое команда Unix для создания жесткой ссылки на каталог в OS X? 13 ответов

как я могу создать жесткую ссылку на каталог в OSX?

эта функция была добавлена в их файловую систему в 10.5 (для time machine), но я не смог найти ни одного информация о фактическом использовании его из командной строки.

4   51  

4 ответа:

к сожалению, Apple подкосил . Вы можете использовать следующую программу для создания жесткой ссылки на каталог:

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

примите во внимание, что жестко связанные каталоги могут быть не в том же родительском каталоге, так что вы можете сделать это:

$ gcc hlink.c -o hlink
$ mkdir child1
$ mkdir parent
$ ./hlink child1 parent/clone2

Я собрал предложенный ответ в Git rep, если кто-то заинтересован:https://github.com/selkhateeb/hardlink

после установки, создать жесткую ссылку с:

hln source destination

Я тоже это заметил unlink команда не работает на snow leopard, поэтому я добавил опцию, чтобы разорвать связь:

hln -u destination

чтобы установить Hardlink, используйте доморощенного и

brew install hardlink-osx

в ответ на вопрос the_undefined о том, как удалить жесткую ссылку на каталог, не удаляя содержимое других каталогов, с которыми она связана: насколько я могу судить, это не может быть сделано из командной строки с помощью встроенных команд. Однако эта небольшая программа (вдохновленная сообщением Фримена) сделает это:

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

чтобы следовать примеру Фримена,

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

удалит жесткую ссылку в parent / clone2, но оставит каталог child1 и файл child1 / baz.только тхт.

другое решение-использовать bindfs https://code.google.com/p/bindfs/ который можно установить через порт:

sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir