Назад | Перейти на главную страницу

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

Как создать жесткую ссылку (в отличие от символической ссылки или псевдонима Mac OS) в OS X, которая указывает на каталог? Есть команда «ln target destination», но она работает только тогда, когда целью является файл.

Я знаю, что Mac OS, в отличие от других сред Unix, позволяет жестко связывать папки (например, это используется для Time Machine), но я не знаю, как это сделать сам. Я также знаю, что использование жестких ссылок на каталоги не является «лучшей практикой», так как это может привести к бесконечной рекурсии некоторых программ при сканировании дерева.

Я слышал, что это было намеренно отключено, так как это может усложниться, если вы измените жесткие ссылки на . и прочее.

Это должно быть невозможно.

Из man 2 link:

int link(const char *path1, const char *path2);

 ....

Для успешного выполнения системного вызова путь path1 должен существовать, а пути path1 и path2 должны находиться в одной файловой системе. Согласно стандарту POSIX.1 путь 1 не может быть каталогом.

Я попробовал код из другого ответа на MacOS X 10.5.6 - он не работал при попытке создать ссылку из каталога с тем же именем в том же каталоге.

Однако это делает работают, если два результирующих каталога не имеют одного и того же родителя. Чтобы узнать это, необходимо прочитать связанную статью.

Тогда вы не сможете сделать это прямо в BASH. Однако ... Я нашел здесь статью, в которой обсуждается, как это сделать косвенно: http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html составив небольшую простую программу:

#include <unistd.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
   if (argc != 3)
      return 1;
   int ret = link(argv[1], argv[2]);
   if (ret != 0)
      perror("link");
   return ret;
}

$ gcc -o hlink hlink.c -Wall