إنشاء روابط صعبة الدليل في Mac OS X [مكررة
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
كيف يمكنني إنشاء رابط صلب إلى دليل في 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