الملف والدليل بنفس الاسم في نفس الدليل الأصلي - Solaris 8، ufs

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

سؤال

حسنًا، لقد كنت أعمل مع Solaris منذ أكثر من 10 سنوات، ولم أر هذا من قبل...

لدي قائمة دليل تتضمن ملفًا ودليلًا فرعيًا بنفس الاسم:

-rw-r--r--   1 root     other    15922214 Nov 29  2006 msheehan
drwxrwxrwx  12 msheehan sysadmin    2048 Mar 25 15:39 msheehan

أستخدم الملف لاكتشاف محتويات الملف، وأحصل على:

bash-2.03# file msheehan
msheehan:       directory
bash-2.03# file msh*
msheehan:      ascii text
msheehan:       directory

لست قلقًا بشأن الملف، لكني أريد الاحتفاظ بالدليل، لذا أحاول rm:

bash-2.03# rm msheehan
rm: msheehan is a directory

إذن هذا هو سؤالي المكون من جزأين:

  1. ما الأمر مع هذا؟
  2. كيف يمكنني حذف الملف بعناية؟

جوناثان

يحرر:شكرًا على الإجابات يا رفاق، كلاهما (حتى الآن) كانا مفيدًا، ولكن إرسال القائمة إلى أحد المحررين أدى إلى الحيلة، علاء:

bash-2.03# ls -l > jb.txt
bash-2.03# vi jb.txt

والتي تضمنت:

-rw-r--r--   1 root     other    15922214 Nov 29  2006 msheehab^?n
drwxrwxrwx  12 msheehan sysadmin    2048 Mar 25 15:39 msheehan

كن حذرًا دائمًا مع مفتاح مسافة للخلف!

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

المحلول

أعتقد أن هذين هما في الواقع اسمان مختلفان للملفات "يبدوان" متماثلين، حيث كان ملف الأوامر قادرًا على التمييز بينهما عندما قام Shell بتمرير الإصدارات الموسعة من الاسم.حاول توصيل ls إلى od أو أداة تفريغ سداسية/ثمانية أخرى لمعرفة ما إذا كان لديهم بالفعل نفس الاسم، أو إذا كانت هناك أحرف غير قابلة للطباعة.

نصائح أخرى

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

سيكون من المثير للاهتمام معرفة ما سيكون ناتج مقتطف الياقوت هذا:

ruby -e 'puts Dir["msheehan*"].inspect'

يمكنك الحذف باستخدام iNode

إذا كنت تستخدم الخيار "-i" في "ls"

$ ls -li
total 1
20801 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a?
20802 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a\?
$ find . -inum 20802 -exec rm {} \;
$ ls -li
total 1
20801 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a?

لدي مثال (باللغة الإسبانية) كيف يمكنك حذف ملف باستخدام iNode على Solarishttp://sparcki.blogspot.com/2010/03/como-eliminar-archivos-utilizando-su.html

أوركو,

وإجابة سريعة على الجزء الثاني من سؤالي...

أتخيل أنه يمكنني إعادة تسمية الدليل وحذف الملف وإعادة تسمية الدليل إلى أصله مرة أخرى.

...سأظل مهتمًا برؤية ما توصل إليه الآخرون.

جي بي

أظن أن أحدهم لديه شخصية غريبة في الاسم.يمكنك محاولة استخدام توسيع Shell Wildcard لمعرفة ما يلي:يكتب

cat msh*

واضغط على مفتاح توسيع حرف البدل (في الصدفة الخاصة بي هو Ctrl-X *).يجب أن تحصل على اسمين مدرجين، ربما يحتوي أحدهما على حرف هروب.

لمعرفة ما إذا كانت هناك أحرف خاصة في ملفك ، جرب خيارات -b أو -Q إلى LS ، على افتراض أن Solaris 8 لديه هذه الخيارات.

كحل آخر لحذف الملف ، يمكنك إحضار متصفح الملفات الرسومية (GASP!) وسحب وإسقاط الملف غير المرغوب فيه إلى القمامة.

قد يكون الحل الآخر هو نقل الملف الواحد إلى اسم مختلف (الملف الذي لا يحتوي على الحرف الخاص غير المعروف)، ثم حذف اسم دليل الحرف الخاص باستخدام أحرف البدل.

mv msheehan temp
rm mshee*
mv temp msheehan

بالطبع، تريد التأكد من أن الملف الذي تريد حذفه فقط هو الذي يطابق حرف البدل.وبالنسبة لحالتك الخاصة، نظرًا لأن أحدهما كان دليلاً والآخر ملفًا، فقد يكون هذا الأمر قد حل المشكلة كلها:

rmdir msheeha*

إحدى الطرق السريعة والسهلة لرؤية الأحرف غير المطبوعة والمسافات البيضاء هي تمرير الإخراج من خلاله قطة - طبيب بيطري, ، على سبيل المثال:

# ls -l | cat -vet

لطيفة وسهلة التذكر!

بالنسبة للجزء الثاني، نظرًا لأن الاسم الواحد يحتوي على حرفين إضافيين، يمكنك استخدام:

mv sheehan abc
mv sheeha??n xyz

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

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