كيفية إزالة كافة الملفات من دليل?

أقرب ما حصلت عليه هو

# rm /path/to/directory/*.*

لكن هذا لا يعمل مع الملفات التي ليس لها امتداد...

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

  • لإزالة الكل الملفات غير المخفية* في استخدام الدليل:

    rm /path/to/directory/*

    ومع ذلك ، سيظهر هذا خطأ لكل دليل فرعي ، لأنه في هذا الوضع يسمح فقط بحذف الملفات.

  • لإزالة كافة الملفات غير المخفية والدلائل الفرعية (جنبا إلى جنب مع كافة محتوياتها) في استخدام الدليل:

    rm -r /path/to/directory/*

* الملفات والدلائل المخفية هي تلك التي تبدأ أسماؤها بـ . (نقطة) حرف ، على سبيل المثال.: .hidden-file أو .hidden-directory/. لاحظ أنه في باش ، إذا كان dotglob الخيار (الذي هو خارج افتراضيا) يتم تعيين, rm ستعمل على الملفات المخفية أيضا ، لأنه سيتم تضمينها عندما * يتم توسيعها من قبل قذيفة لتوفير قائمة من الحجج اسم الملف.

  • لإزالة مجلد يحتوي على جميع محتوياته (بما في ذلك جميع المجلدات الداخلية):

    rm -rf /path/to/directory
  • لإزالة جميع محتويات المجلد (بما في ذلك جميع المجلدات الداخلية) ولكن ليس المجلد نفسه:

    rm -rf /path/to/directory/*

    أو ، إذا كنت تريد التأكد من إزالة الملفات/الدلائل المخفية أيضا:

    rm -rf /path/to/directory/{*,.*}
  • لإزالة كافة & مثل; الملفات & مثل; من داخل مجلد(لا إزالة المجلدات الداخلية):

    rm -f /path/to/directory/{*,.*}

تحذير: إذا كان لديك مسافات في المسار الخاص بك ، تأكد من استخدام دائما علامات الاقتباس.

rm -rf /path/to the/directory/*

ما يعادل 2 منفصلة rm -rf المكالمات:

rm -rf /path/torm -rf the/directory/*

لتجنب هذه المشكلة ، يمكنك استخدام 'ونقلت واحدة'(يمنع جميع التوسعات ، حتى من المتغيرات قذيفة) أو "اقتباسات مزدوجة"(يسمح بتوسيع متغيرات القشرة ، لكنه يمنع التوسعات الأخرى):

rm -rf "/path/to the/directory/"*

أين:

  • rm - لتقف على إزالة
  • -f - لتقف على القوة وهو أمر مفيد عندما لا تريد أن يطلب منك / يطلب منك إذا كنت تريد إزالة أرشيف ، على سبيل المثال.
  • -r - لتقف على العودية مما يعني أنك تريد أن تذهب بشكل متكرر أسفل كل مجلد وإزالة كل شيء.

لإزالة جميع الملفات في الدليل (بما في ذلك الملفات المخفية والدلائل الفرعية) تشغيل:

rm -rf /path/to/directory/{*,.*}

لحذف جميع الملفات والدلائل (بما في ذلك مخفي منها) في الدليل ، يمكنك تجربة ما يلي:

  • احذف المجلد ، ثم أعد إنشائه

    rm -rf dir_name && mkdir dir_name
  • استخدام find

    find dir_name -mindepth 1 -delete  

هنا نحدد -mindepth 1 لاستبعاد اسم الدليل نفسه.
ألق نظرة على الرابط التالي:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

إذا كنت ترغب في حذف الملفات فقط في / مسار / إلى / دليل يمكنك القيام به

find /path/to/directory -type f -print0| xargs -0 rm 

أو

find /path/to/directory -type f -exec rm '{}' \;

يمكنك القيام الأحمال مع find، الميزة هي أنه يمكنك سرد ما تم العثور عليه دون وضعه على الأنابيب rm حتى تتمكن من رؤية ما سيتم حذفه قبل البدء.

إذا كنت تريد أيضا إزالة جميع الدلائل الفرعية والدليل نفسه ، فيمكنك استخدام rm -rf /path/to/directory. ولكن دائما انقر نقرا مزدوجا التحقق من الخط الخاص بك قبل الضغط على العودة, rm -rf يمكن أن يسبب الكثير من هافوك كذلك ، على سبيل المثال إذا قمت بإدراج بطريق الخطأ مسافة بعد الشرطة المائلة الأولى في حين وجود أذونات الخارق...

وبما أن هذا السؤال هو باستمرار في الجزء العلوي من جوجل عندما أبحث عن هذا نفسي:

الإجابات الأخرى تعاني من مشاكل مختلفة:

  1. بعض منهم تشمل . و .. وهو صاخبة, مربك, ومزعج.

  2. بعضهم ينسى الملفات المخفية (الملفات التي تبدأ بنقطة).

  3. لا يتم حذفها بترتيب صحيح (أعمق أولا) للسماح بحذف الدليل.

  4. تنزل إلى أنظمة ملفات أخرى (مثبتة) ، والتي غالبا ما تكون غير مرغوب فيها.

  5. من الصعب تمديدها بشكل صحيح مع معلمات إضافية (المزيد عن ذلك أدناه).

لذلك ، لحذف جميع الملفات والمجلدات بشكل متكرر في دليل ، قم بذلك:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

لاحظ أنني أضفت -xdev حجة لمنع النزول إلى يتصاعد (مثل /proc الخ.).

لماذا لا -depth أو -delete?

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

-not \( -path "${DIR}/subdir" -prune \)

قبل -mindepth حجة لاستبعاد subdir من حذف محتوياته.

يمكنك cd في الدليل ثم قم بتشغيل الأمر rm *.* تماما كما هو الحال في دوس إذا كنت تتذكر.

لحذف الدليل الحالي ، يمكنك على سبيل المثال استخدام rm -d ./*

- د يقول لحذف الدلائل كذلك.

انظر الإجابة هنا ، وهذا يمكن إزالة الملفات المخفية وكذلك مع أي تحذير وحذف الدليل نفسه ubuntu - Delete contents but not directory in Linux? - Stack Overflow

ليس لدي سمعة كافية لإضافة إجابة حقيقية ، ولكن عند استخدام شوبت-ق دوتغلوب و & آرإم/مسار/إلى/ دليل /* الحل في باش ، (شوبت-ق دوتغلوب و & آرإم/مسار/إلى/ دليل/*) (مع الأقواس) سيمنع شوبت-ق دوتغلوب من تسرب وراء هذا الأمر واحد. (الأقواس تشغيل الأوامر الواردة في سوبشيل.)