OOZOU
تواصلوا معنا
العودة إلى TIL
shell

دالة Zsh لعرض شجرة الملفات

13 أكتوبر 2020

عند التنقل بين المجلدات في سطر الأوامر، يفيد غالبًا رؤية بنية المجلدات والمجلدات الفرعية بتنسيق "شجرة". ورغم وجود أدوات كثيرة لذلك، مثل 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

تسهّل هذه البنية الشجرية البسيطة تصوّر العلاقات بين المجلدات والمجلدات الفرعية.

كيف تعمل

لنفصّل الدالة خطوة بخطوة:

  1. ls -R $1: يعرض الأمر ls -R محتويات المجلد ومجلداته الفرعية بشكل عَوْدي (recursive)، أو محتويات المجلد الحالي إذا لم يُمرَّر أي وسيط.
  2. grep ":$": يرشّح النتائج لعرض أسماء المجلدات فقط (الأسطر التي تنتهي بـ :).
  3. أوامر 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، تحسّنون تجربتكم في سطر الأوامر وتجعلون التنقل بين المجلدات أسهل بكثير.

المزيد حول shell

shell8 ديسمبر 2020

تشغيل أوامر خاصة (incognito) في Bash وZsh

يكفي أن تضعوا مسافة قبل الأمر كي لا يُحفظ في ~/.bash_history. مثال: qrencode -o out.png "Some secret text"

shell22 أكتوبر 2020

ترقية قاعدة بيانات Postgres باستخدام Homebrew

لترقية Postgres يمكنكم تشغيل

shell13 أكتوبر 2020

النسخ عبر Amazon AWS S3 CLI مع تعيين الصلاحيات

افتحوا الطرفية (أو ما يعادلها) والصقوا ما يلي:

هل لديكم فكرة مشروع؟

يسعدنا أن نتعرّف على ما تبنونه.

ابدأوا المحادثةhello@oozou.com
OOZOU Logo

بانكوك · سنغافورة · هونغ كونغ

X
Facebook
Instagram
LinkedIn
OOZOU Co., Ltd.
548 One City Centre
Ploenchit Road
Bangkok 10330
Thailand
+66 2544 0000
hello@oozou.com

الخدمات

  • تطوير الويب
  • وكلاء الذكاء الاصطناعي والذكاء الاصطناعي التوليدي
  • تطوير تطبيقات الجوال
  • تحليلات البيانات وهندستها
  • تصميم تجربة المستخدم وواجهته (UX/UI) وتصميم المنتجات
  • التحوّل الرقمي

الشركة

  • من نحن
  • الوظائف
  • المدونة
  • دراسات الحالة
  • عروض حية
  • تعلّمت اليوم
  • تواصل معنا

المزيد

  • القطاعات
  • شبكة الشركاء
© 2026 OOZOU. جميع الحقوق محفوظة.
سياسة الخصوصيةمدونة قواعد السلوكسياسة مكافحة الرشوة والفساد