استخدام أداة Bash Sort لفرز الملفات كالمحترفين

هل تبحث عن وسيلة لتنظيم ملفاتك وإجراء بعض العمليات عليها؟ هناك العديد من الحالات في البرمجة حيث تحتاج إلى فرز بعض البيانات، مثل قائمة من الملفات. فإن فرز الملفات باستخدام أوامر Bash sort و ls سيساعدك في الحفاظ على التنظيم.

في هذا البرنامج التعليمي، ستتعلم أساسيات فرز الملفات ومحتوياتها.

لنقم بالترتيب!

المتطلبات

يستخدم هذا البرنامج التعليمي Ubuntu 20.04، ولكن أي توزيع Linux آخر سيعمل.

فرز الملفات بشكل أبجدي باستخدام Bash

هناك العديد من الطرق لفرز الملفات في نظام Linux، ولكن دعونا نركز على الطريقة الأكثر شيوعاً، وهي فرز الملفات أبجدياً.

قم بفتح الطرفية الخاصة بك وتشغيل الأمر ls -l أدناه للحصول على قائمة بالملفات في دليل بترتيب تصاعدي. يقول العلم -l لأمر ls بطباعة الناتج المسترجع بتنسيق قائمة طويلة.

ls -l
Bash Sort to Sort Files Alphabetically

بشكل افتراضي، يقوم أمر ls بسرد الملفات بترتيب تصاعدي. لعكس ترتيب الفرز، قم بتمرير العلم -r إلى أمر ls -l، مثل هذا: ls -lr. تطبيق العلم -r إلى أمر ls -l ينطبق على أمثلة أخرى في هذا البرنامج التعليمي.

استخدام فرز Bash لترتيب الملفات حسب الحجم

بدلاً من ترتيب الملفات ترتيباً أبجدياً، قد ترغب في ترتيب الملفات حسب حجمها. يعد ترتيب الملفات حسب الحجم مفيدًا عندما يكون هناك حاجة لرؤية إما أصغر الملفات أو أكبرها في قائمة.

لترتيب الملفات حسب الحجم، قم بتمرير العلم -S إلى الأمر ls لإخباره بترتيب قائمة الملفات حسب الحجم.

قم بتشغيل الأمر أدناه لعرض الملفات (ls) مرتبة حسب الحجم بتنسيق قائمة طويلة (ls -lS).

ls -lS

أدناه، يمكنك أن ترى أن الأمر قام بترتيب الملفات حسب الحجم بترتيب تنازلي (من الأكبر إلى الأصغر من حيث الحجم).

لعكس ترتيب الفرز (من الأصغر إلى الأكبر)، أضف العلم -r، مثل هذا: ls -lSr

Sorting Files by Size

ترتيب الملفات حسب وقت التعديل عبر ترتيب Bash Sort

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

قم بتشغيل الأمر أدناه حيث يخبر المعلم -t الأمر ls بترتيب الملفات حسب وقت التعديل.

ls -lt
Sorting Files in a Directory by Modification Time

ترتيب الملفات حسب امتداد الملف

عندما تبحث عن ملف بنوع معين من الملفات، يعد ترتيب الملفات حسب امتداد الملف الحل المثالي.

قم بتنفيذ الأمر أدناه لعرض الملفات (ls) في دليل العمل وترتيبها استنادًا إلى امتداداتها (ls -lx).

ls -lX

لاحظ أدناه أن الأمر قام بترتيب الملفات ذات نفس الامتداد بترتيب تصاعدي استنادًا إلى أسمائها.

Sorting Files by File Extension

فرز محتويات ملف نصي

الآن، لقد تعلمت مختلف الطرق لفرز الملفات في دليل. بتحويل انتباهك من الأمر ls، جرب تشغيل الأمر sort. يقوم الأمر sort بفرز محتوى الملف اعتمادًا على العلم الذي ستضيفه. ولكن أولاً، تحتاج إلى ملف يحتوي على محتويات ستقوم بتعديلها.

قم بتشغيل الأمر أدناه لإنشاء ملف نصي يسمى ~/data/fruits.txt يحتوي على أسماء فواكه. العلم -e يمكّن تفسير الشرطة الخلفية لكتابة كل كلمة في سطر جديد (\n).

echo -e "apple \nmango \nwatermelon \ncherry \norange \nbanana" > fruits.txt

الآن قم بتشغيل الأمر أدناه لفرز كل كلمة في fruits.txt.

sort fruits.txt

أدناه، يمكنك رؤية محتويات الملف مرتبة بترتيب تصاعدي.

Sorting File’s Content Alphabetically in Ascending Order

بدون أي علم، يقوم الأمر sort بفرز محتويات الملف بترتيب تصاعدي افتراضيًا. لعكس ترتيب الفرز، أضف العلم -r إلى أمر الفرز، مثل هذا: sort -r fruits.txt. تطبيق الفرز بترتيب عكسي عن طريق إضافة العلم -r ينطبق على أمثلة أخرى في هذا البرنامج التعليمي.

فرز قائمة من الأرقام في ملف نصي

الأمر لفرز الأرقام مشابه لفرز النصوص في ملف، ولكن ستضيف العلم -n بدلاً من ذلك. دعنا نقوم أولاً بإنشاء ملف لنوضح كيفية فرز المحتوى الرقمي للملف.

قم بتشغيل الأمر أدناه لإنشاء ملف يسمى ~/data/scores.txt يحتوي على أرقام عشوائية، كل منها في سطر جديد.

echo -e "45 \n69 \n52 \n21 \n3 \n5 \n78" > scores.txt

الآن قم بتشغيل الأمر أدناه لفرز الأرقام (-n) في ملف ~/data/scores.txt.

sort -n scores.txt

يمكنك رؤية أدناه الأرقام المدرجة في الأسطر تبدأ من الأصغر إلى الأكبر.

Sorting Numbers in a File

فرز قائمة من أرقام الإصدارات في ملف نصي

ربما لديك قائمة من أرقام الإصدارات في ملف نصي تريد فرزه. إذا كان الأمر كذلك، فإضافة الخيار --version-sort سيقوم بالعملية.

لتوضيح كيف يعمل الخيار --version-sort، قم أولاً بإنشاء ملف نصي.

قم بتشغيل الأمر أدناه لإنشاء ملف نصي بالاسم ~/data/versions.txt والذي يحتوي على أرقام إصدار عشوائية مدرجة، كل رقم في سطر جديد (\n).

echo -e "1.0.0.1 \n 6.2.1.0 \n4.0.0.2" > versions.txt

الآن قم بتشغيل الأمر أدناه لـ فرز أرقام الإصدارات (--version-sort) في ملف versions.txt. يخبر خيار --field-separator الأمر sort بأن الأرقام في كل إصدار مفصولة بنقطة (.). يمكنك تغيير فاصل الحقل إلى أي حرف يفصل الأرقام في الإصدارات المدرجة في ملف النص الخاص بك.

sort --version-sort --field-separator=. versions.txt
Sorting Version Numbers from a Text File

ترتيب باش للعثور على الملفات وترتيبها عبر امتداد الملف

كنت تقوم بتشغيل أوامر فردية (إما ls أو sort) في الأمثلة السابقة. ولكن في البرمجة، قد تحتاج في كثير من الأحيان إلى استخدام أمرين أو أكثر معًا. كيف؟ عن طريق التوصيل لأمر واحد إلى آخر.

قم بتشغيل الأمر أدناه للعثور على جميع ملفات التخطيط (-iname "*.md") في دليل العمل (.)، وترتيبها ترتيبًا أبجديًا تنازليًا (sort -r). حاول العثور وترتيب ملفات أخرى عن طريق تغيير "*.md" إلى امتداد ملف آخر.

find . -iname "*.md" | sort -r
Finding and Listing Files in Alphabetically Descending Order

إذا كنت تفضل حفظ الناتج المرتب إلى ملف نصي بدلاً من الإخراج القياسي على وحدة التحكم، أضف الخيار --output، مثل هذا: find . -iname "*.md" | sort -r --output=sorted.txt. يخبر الخيار --output أمر sort بإنشاء ملف إخراج لقائمة الملفات المرتبة.

الختام

كانت دافع هذا المقال هو تعليمك حول طرق مختلفة للفرز باستخدام أوامر Bash على جهاز Linux. لقد تعلمت الآن كيفية فرز قائمة الملفات وفرز محتوى الملف. بالإضافة إلى ذلك، يجب أن تعرف أيضًا كيفية استخدام أنابيب الأوامر المختلفة للفرز الأكثر تعقيدًا للملفات.

مع هذا المعرف الجديد كحجر الزاوية، لماذا لا تقوم بإنشاء سكربتات لتلقائي قوائم الملفات وفرز محتوى الملف؟

Source:
https://adamtheautomator.com/bash-sort/