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

StackOverflow https://stackoverflow.com/questions/1432540

  •  07-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

#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, если кому-то интересно: https://github.com/selkhateeb/hardlink

После установки создайте жесткую ссылку с:

hln source destination

Я также заметил , что unlink команда не работает в Mac OS X версии 10.6 (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.txt один.

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

sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top