تقسيم الملفات في مجلد إلى اكثر
مقدمة:
اليوم في العمل, عند تحديث احد الأنظمة لنسخة جديدة تم فيها إعادة هيكلة قاعدة البيانات والكود, واجهتنا مشكلة بسيطة وهي مع التحديث نحتاج تغيير أماكن المرفقات بدلا من مجلد واحد لتكون في مجلدات حسب المرفق.
تقنيا, عند حفظ نسخة من العقد كـ مرفق أو نسخة من السيرة الذاتية يتم الحفظ في ملف www/downloads/
.
هذه الطريقة ليست جيدة اذا كثرت الملفات في مجلد واحد حيث تبداء المشاكل والبطء بعد 10000 ملف.
ولحل هذه المشكلة, كان الحل هو تقسيم الملفات في مجلدات حسب نوع الملف مثلا.
الحالة
- اسماء الملفات موجودة في اكثر من جدول٤ مثلا,
- الملفات نفسها موجودة في مجلد واحد
حل المشكلة نظريا
- استخراج اسماء الملفات وحفظها في ملف خاص لكل جدول
- نقل كل ملف في المجلد القديم الى مجلد حسب الجدول
الحل العملي
اول خطوة هي استخراج اسماء الملفات من الجداول كل جدول في ملف لوحده,
بعد ذلك تعديل الملف التالي, وتطبيقه على الملف المراد.
#!/bin/bash
#configuration
src="./b/" # source folder e.g. www/downloads/
dist="./a/" # destination e.g. www/downloads/contracts/
#read each line and move matched file
while IFS='' read -r line || [[ -n "$line" ]]; do
mv $src$line $dist$line # you may use cp
done < "$1"
الآن بعد حفظ الملف واعطائه صلاحيات x يمكن تجربة السكربت
مثلا اذا حفظ الملف بإسم copyer.sh
وملفات العقود موجوده في ملف contract.sql يمكن نسخها بهذا الأمر
$ ./copyer.sh contract.sql
تم بحمد الله, متمنيا أن تكون مفيده