Как создать жесткую ссылку (в отличие от символической ссылки или псевдонима 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 для создания жесткой ссылки на каталог в OS X?
Тогда вы не сможете сделать это прямо в 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