دالة Zsh لعرض شجرة الملفات
عند التنقل بين المجلدات في سطر الأوامر، يفيد غالبًا رؤية بنية المجلدات والمجلدات الفرعية بتنسيق "شجرة". ورغم وجود أدوات كثيرة لذلك، مثل tree، قد ترغبون أحيانًا في حل مخصص وبسيط مدمج مباشرة في الـ shell. نشرح في هذا المقال خطوة بخطوة كيفية إنشاء دالة Zsh بسيطة لعرض بنية المجلد بتنسيق شجرة.
إنشاء دالة Zsh لعرض شجرة الملفات
إذا كنتم تستخدمون Zsh كـ shell افتراضي، فإن إضافة دالة مخصصة إلى ملف .zshrc تمنحكم أمرًا سريعًا وفعّالًا لعرض المجلدات في بنية شجرية. تعمل هذه الدالة بشكل مشابه لأمر tree الشهير، لكنها مبنية باستخدام ls وsed، مما يسهّل دمجها مباشرة في بيئة Zsh لديكم.
الخطوة 1: أضيفوا الدالة lst() إلى .zshrc
الخطوة الأولى هي تعريف الدالة lst() داخل ملف .zshrc. تقبل هذه الدالة وسيطًا اختياريًا، وهو أي مسار لمجلد، وتعرض شجرة المجلدات بدءًا منه. وإذا لم تحددوا مجلدًا، فستستخدم المجلد الحالي افتراضيًا.
افتحوا ملف .zshrc في محرر النصوص الذي تفضّلونه وأضيفوا الدالة التالية:
lst() {
if [ "$1" != "" ] # or better, if [ -n "$1" ]
then
ls -R $1 | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
else
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
fi
}
الخطوة 2: أعيدوا تحميل إعدادات Zsh
بعد إضافة الدالة، عليكم إعادة تحميل ملف .zshrc حتى تسري التغييرات. ويمكنكم ذلك بتشغيل الأمر التالي في الطرفية:
sh
source ~/.zshrc
الخطوة 3: استخدموا الدالة lst()
بعد إضافة الدالة إلى .zshrc، يمكنكم البدء في استخدامها فورًا. تتيح لكم الدالة lst() عرض جميع المجلدات الفرعية داخل مجلد محدد بتنسيق شجرة. إليكم طريقة استخدامها:
لعرض المجلدات الفرعية لمجلد ما (مثل spec)، شغّلوا:
sh
lst spec
سيولّد هذا الأمر بنية شجرية تعرض جميع المجلدات الفرعية داخل المجلد spec.
وإذا أردتم رؤية البنية الشجرية للمجلد الحالي، فشغّلوا ببساطة:
sh
lst
ستعرض الدالة lst() بنية المجلدات، مما يسهّل فهم التسلسل الهرمي لمجلداتكم.
مثال على المخرجات
لنفترض أن لديكم بنية المجلدات التالية:
bash
spec/
├── controllers/
│ └── users/
├── models/
└── views/
سينتج عن تشغيل الأمر lst spec مخرجات مشابهة لما يلي:
css
spec
|--controllers
| |--users
|--models
|--views
تسهّل هذه البنية الشجرية البسيطة تصوّر العلاقات بين المجلدات والمجلدات الفرعية.
كيف تعمل
لنفصّل الدالة خطوة بخطوة:
- ls -R $1: يعرض الأمر ls -R محتويات المجلد ومجلداته الفرعية بشكل عَوْدي (recursive)، أو محتويات المجلد الحالي إذا لم يُمرَّر أي وسيط.
- grep ":$": يرشّح النتائج لعرض أسماء المجلدات فقط (الأسطر التي تنتهي بـ :).
- أوامر sed:
- 's/:$//': يحذف النقطتين في نهاية اسم كل مجلد.
- 's/[^-][^/]*//--/g': يستبدل الشرطات المائلة (/) بشرطات (--)، فيحوّل البنية إلى تنسيق شجري.
- 's/^/ /': يضيف مسافة بادئة إلى شجرة المجلدات.
- 's/-/|/': يستبدل الشرطات بخطوط عمودية (|)، فيعزّز التنسيق الشجري أكثر.
الخطوة 4: خصّصوا الدالة lst()
يمكنكم بسهولة تخصيص الدالة lst() بما يناسب احتياجاتكم. على سبيل المثال، يمكنكم تغيير تنسيق البنية الشجرية أو إضافة خيارات أخرى لعرض الملفات. وإذا كنتم تحتاجون كثيرًا إلى عرض الملفات إلى جانب المجلدات، فيمكنكم تعديل الدالة لتشمل الملفات بإزالة مرشّح grep الذي يعرض المجلدات فقط.
البديل: استخدام أمر tree
إذا كنتم تفضّلون ذلك، يمكنكم استخدام أمر tree المصمم خصيصًا لعرض بنى المجلدات. tree أداة متاحة على نطاق واسع ويمكن تثبيتها على معظم الأنظمة الشبيهة بـ Unix. ولتثبيتها، استخدموا أحد الأوامر التالية حسب نظامكم:
على Ubuntu أو الأنظمة المبنية على Debian:
sh
sudo apt-get install tree
على macOS:
sh
brew install tree
بعد التثبيت، يمكنكم استخدام أمر tree لتوليد مخرجات مشابهة:
sh
tree spec
يوفّر أمر tree ميزات أكثر جاهزة للاستخدام، مثل القدرة على عرض أحجام الملفات والصلاحيات وغير ذلك. لكن إذا كنتم تفضّلون البساطة أو لم يكن tree متاحًا، فإن الدالة lst() بديل خفيف ممتاز.
الخلاصة
توفّر دالة Zsh التي أنشأناها طريقة بسيطة وفعّالة لعرض بنى المجلدات بتنسيق شجرة. وبإضافة الدالة lst() إلى ملف .zshrc، يمكنكم تصوّر المجلدات الفرعية لأي مجلد على نظامكم بسرعة. وهذا مفيد جدًا للتنقل في بنى المجلدات المعقدة وفهم التسلسل الهرمي للملفات والمجلدات في مشاريعكم.
وإذا كنتم تبحثون عن وظائف أكثر، ففكّروا في استخدام أمر tree للحصول على ميزات متقدمة. أما للحلول المخصصة الخفيفة المدمجة مباشرة في Zsh، فالدالة lst() خيار مثالي.
الأسئلة الشائعة
1. ما استخدام الدالة lst()؟
الدالة lst() دالة Zsh مخصصة تعرض بنية المجلدات بتنسيق شجرة. وتستخدم ls وsed لتنسيق المخرجات، مما يسهّل تصوّر التسلسل الهرمي للمجلدات مباشرة في الطرفية.
2. كيف أضيف الدالة lst() إلى إعدادات Zsh؟
يمكنكم إضافة الدالة lst() بتعديل ملف .zshrc ولصق تعريف الدالة فيه. بعد ذلك شغّلوا source ~/.zshrc لإعادة تحميل الإعدادات وإتاحة الدالة.
3. هل يمكنني تخصيص مخرجات الدالة lst()؟
نعم، يمكنكم تخصيص الدالة بتعديل أوامر sed التي تنسّق المخرجات. ويمكنكم تغيير البنية الشجرية أو إضافة مزيد من التفاصيل أو حتى تضمين الملفات في القائمة.
4. ما البديل عن استخدام الدالة lst()؟
أمر tree أداة متاحة على نطاق واسع تعرض بنى المجلدات بتنسيق شجرة. ويوفّر ميزات أكثر من الدالة lst() ويمكن تثبيته على معظم الأنظمة الشبيهة بـ Unix.
5. هل يمكنني استخدام الدالة lst() في shells أخرى غير Zsh؟
كُتبت الدالة lst() لـ Zsh، لكن يمكن تكييفها بسهولة مع shells أخرى مثل Bash بإضافتها إلى ملف الإعدادات المناسب (.bashrc في Bash).
بدمج الدالة lst() في سير عملكم مع Zsh، تحسّنون تجربتكم في سطر الأوامر وتجعلون التنقل بين المجلدات أسهل بكثير.