مشروع: جرد مجلد
Directory Inventory Lab
مشروع: جرد مجلد — Directory Inventory Lab
هذا أول مشروع صغير في مسار Bash. المطلوب أن تبني تقريراً عن مجلد: ما المسار؟ كم ملفاً داخله؟ كم مجلداً؟ وما الرسالة المناسبة إذا كان المسار غير صالح؟ المشروع يبدو بسيطاً، لكنه يجمع مفاهيم الفصل: مسارات، تحقق، أوامر نظام، واقتباس.
ابدأ دائماً بتحديد المدخل. السكربت سيأخذ المسار من أول معامل، أو يستخدم المجلد الحالي كقيمة افتراضية. بعد ذلك نتحقق أن المسار مجلد. ثم نستخدم find لحساب الملفات والمجلدات. الأمر wc -l يعطينا عدد السطور، وtr -d ' ' يزيل المسافات الزائدة من الناتج.
تنبه إلى -mindepth 1 في أمر المجلدات: بدونها، find "$directory" -type d يُضمّن المجلد الجذر نفسه ($directory) في العدّ، وهذا يجعل النتيجة أكبر بواحد دائماً. الخيار -mindepth 1 يجعل find يبدأ من المستوى الأول داخل المجلد، فيعدّ المجلدات الفرعية فقط دون المجلد الأصلي.
تحذير تقني: find … | wc -l يُخطئ العدّ إذا احتوى اسم ملف على حرف سطر جديد \n — وهذا مسموح به في أسماء الملفات على Unix. كل سطر ناتج من find يمثل مساراً، لكن الاسم الذي يحوي \n يُنتج سطرين، فتحسبه ملفين. الطريقة الآمنة: find "$directory" -type f -print0 | tr -cd '\0' | wc -c — الخيار -print0 يفصل الأسماء بحرف النول \0 بدلاً من السطر الجديد (والـ\0 محظور في أسماء الملفات)، ثم تُحسب حروف النول. في المختبرات اليومية النمط القديم يكفي، لكن في السكربتات الإنتاجية التي تُعالج أسماء عشوائية استخدم دائماً الطريقة الآمنة.
لا تجعل المشروع يحذف أو يغير شيئاً. الهدف تقرير قراءة فقط. هذه عادة ممتازة للمختبرات الأولى: ابن أدوات تفهم النظام قبل أن تبني أدوات تغيره.
نموذج حل
في مشاريع أكبر، قد تحتاج تجاهل مجلدات مثل .git أو node_modules. لا تضف ذلك الآن. تعلم أولاً النسخة الصافية، ثم أضف خيارات عندما تظهر الحاجة.
تحدي صغير
اكتب تقريراً ثابتاً من متغيرات جاهزة. الهدف ليس تشغيل find هنا، بل تثبيت شكل التقرير.