سؤال

لدي رابط رمزي لدليل مهم.أريد التخلص من هذا الارتباط الرمزي، مع الاحتفاظ بالدليل خلفه.

حاولت rm والعودة rm: cannot remove 'foo'.
حاولت rmdir وعاد rmdir: failed to remove 'foo': Directory not empty
ثم تقدمت من خلال rm -f, rm -rf و sudo rm -rf

ثم ذهبت للعثور على النسخ الاحتياطية الخاصة بي.

هل هناك طريقة للتخلص من الارتباط الرمزي دون رمي الطفل بماء الاستحمام؟

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

المحلول

# this works
rm foo
# versus
rm foo/

وأساسا، كنت بحاجة لمعرفة ما حذف ملف، وليس حذف الدليل. وأعتقد أن الفرق بين rm وrmdir موجود بسبب الاختلافات في الطريقة التي يعامل C مكتبة لكل منهما.

وعلى أية حال، يجب أن تعمل الأولى، في حين أن الثانية يجب أن يشكو فو كونه الدليل.

إذا كان لا يعمل على النحو الوارد أعلاه، ثم تحقق الأذونات الخاصة بك. كنت بحاجة إلى كتابة إذن إلى الدليل الذي يحتوي على إزالة الملفات.

نصائح أخرى

استخدم أمر "إلغاء الارتباط" وتأكد لا للحصول على / في النهاية

$ unlink mySymLink

unlink() يحذف الاسم من نظام الملفات. إذا كان هذا الاسم هو الرابط الأخير لملف ولم تكن هناك عمليات تفتح الملف، فسيتم حذف الملف وستصبح المساحة التي كان يستخدمها متاحة لإعادة الاستخدام.إذا كان الاسم هو الرابط الأخير لملف ولكن لا تزال هناك أي عمليات تحتوي على الملف مفتوحًا، فسيظل الملف موجودًا حتى يتم إغلاق آخر واصف ملف يشير إليه.

أعتقد أن هذا قد يكون مشكلة إذا قرأته بشكل صحيح.

إذا كان الاسم يشير إلى رابط رمزي يتم إزالة الرابط.

إذا كان الاسم يشير إلى مأخذ توصيل أو fifo أو جهاز، فسيتم إزالة الاسم الخاص به ولكن العمليات التي يكون الكائن مفتوحًا قد تستمر في استخدامه.

https://linux.die.net/man/2/unlink

وجمهورية مقدونيا يجب إزالة ارتباط رمزي.

skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$ 

استخدم rm symlinkname لكن لا تتضمن مائل في نهاية (لا تستخدم: rm symlinkname/). وبعد ذلك يطلب منك إذا كنت ترغب في إزالة الارتباط الرمزي، y للرد نعم.

وعلى افتراض أنه في الواقع هو الارتباط الرمزي،

$ rm -d symlink

وينبغي أن الرقم بها، ولكن لأنه لا يمكننا تمكين رمز الكامنة التي كانت مخصصة للقضية أخرى لم يعد موجودا ولكن يحدث أن تفعل الشيء الصحيح هنا.

إذا رينغيت ماليزي لا يمكن إزالة الارتباط الرمزي، وربما كنت بحاجة الى ان ننظر في الأذونات على الدليل الذي يحتوي على الارتباط الرمزي. لإزالة إدخالات الدليل، كنت بحاجة إلى كتابة إذن على الدليل الذي يحتوي.

وعلى افتراض الإعداد الخاص بك هو شيء من هذا القبيل: ln -s /mnt/bar ~/foo، ثم يجب أن تكون قادرة على القيام rm foo مع أي مشكلة. إذا كنت لا تستطيع، تأكد من أنك صاحب foo ولها إذن الكتابة / تنفيذ الملف. سوف إزالة foo لا تلمس bar، إلا إذا كنت تفعل ذلك بشكل متكرر.

في سينت أو إس، فقط تشغيل rm linkname وأنها ستطلب إلى "إزالة ارتباط رمزي؟". اكتب Y و أدخل ، ستزول الرابط والدليل أن تكون آمنة.

وكان لي هذه المشكلة مع مينغو (في الواقع جيت باش) يعمل على Windows Server. يبدو أي من الاقتراحات المذكورة أعلاه للعمل. في النهاية قدم نسخة من الدليل في حالة ثم حذف الرابط لينة في مستكشف ويندوز ثم حذف هذا البند في سلة المحذوفات. جعلت أصواتا مثل ما كان حذف الملفات ولكن لم يفعل ذلك. لا تجعل نسخة احتياطية على الرغم من!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top