سؤال

هذا السؤال لديه بالفعل إجابة هنا:

كيف يمكنني إنشاء رابط صلب إلى دليل في Mac OS X؟

تمت إضافة هذه الميزة إلى نظام الملفات الخاص بهم في Mac OS X V10.5 (Leopard) (لآلة الوقت) ، لكنني لم أتمكن من العثور على أي معلومات حول استخدامها فعليًا من سطر الأوامر.

هل كانت مفيدة؟

المحلول

لسوء الحظ ، شلت شركة 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 V10.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