إتقان معالجة الملفات أمر بالغ الأهمية لأي مطور، ويوفر روبي حلولاً أنيقة لإعادة تسمية الملفات بكفاءة. يستكشف هذا الدليل تقنيات متنوعة، بدءًا من إعادة تسمية ملف واحد إلى عمليات دفعة معقدة عبر الدلائل.
محتويات
- لماذا إعادة تسمية الملفات برمجياً؟
- إعادة تسمية ملف واحد
- إعادة تسمية الملفات في نفس الدليل
- إعادة تسمية الملفات بشكل متكرر عبر الأدلة الفرعية
- إعادة تسمية الملفات دفعة واحدة باستخدام منطق مخصص
- معالجة الأخطاء المتينة
لماذا إعادة تسمية الملفات برمجياً؟
تصبح إعادة تسمية الملفات يدوياً غير عملية عند التعامل مع العديد من الملفات. تقدم الأتمتة العديد من المزايا:
- الكفاءة: معالجة مئات أو آلاف الملفات بسرعة ودقة.
- التوحيد: فرض اتفاقيات تسمية متسقة لتحسين التنظيم.
- مراقبة الإصدارات: إضافة طوابع زمنية أو أرقام إصدارات لتتبع تكرارات الملفات.
- تكامل سير العمل: دمج إعادة تسمية الملفات بسلاسة في خطوط أنابيب معالجة البيانات الأكبر.
- تنظيف البيانات: تصحيح الأخطاء المطبعية، وإزالة الأحرف غير المرغوب فيها، وتحسين إمكانية البحث.
إعادة تسمية ملف واحد
تتضمن أبسط سيناريوهات إعادة تسمية ملف واحد. تقوم طريقة File.rename
في روبي بذلك مباشرةً:
old_path = "/path/to/old_file.txt"
new_path = "/path/to/new_file.txt"
begin
File.rename(old_path, new_path)
puts "تمت إعادة تسمية الملف بنجاح!"
rescue Errno::ENOENT
puts "خطأ: لم يتم العثور على الملف '#{old_path}'."
rescue Errno::EEXIST
puts "خطأ: الملف '#{new_path}' موجود بالفعل."
rescue => e
puts "حدث خطأ: #{e.message}"
end
إعادة تسمية الملفات في نفس الدليل
لإعادة تسمية ملفات متعددة داخل نفس الدليل، استخدم Dir.glob
لتحديد الملفات التي تطابق نمطًا:
directory = "/path/to/files"
pattern = "*.txt"
Dir.glob("#{directory}/#{pattern}") do |file|
new_filename = file.gsub(/.txt$/, "_modified.txt") #مثال على منطق إعادة التسمية
begin
File.rename(file, new_filename)
puts "تمت إعادة التسمية: #{file} -> #{new_filename}"
rescue => e
puts "خطأ في إعادة تسمية #{file}: #{e.message}"
end
end
إعادة تسمية الملفات بشكل متكرر عبر الأدلة الفرعية
لإعادة تسمية الملفات عبر الأدلة الفرعية، استخدم المُعرف النجمي `**` مع Dir.glob
:
directory = "/path/to/files"
pattern = "*.txt"
Dir.glob("#{directory}/**/#{pattern}") do |file|
new_filename = file.gsub(/.txt$/, "_modified.txt")
begin
File.rename(file, new_filename)
puts "تمت إعادة التسمية: #{file} -> #{new_filename}"
rescue => e
puts "خطأ في إعادة تسمية #{file}: #{e.message}"
end
end
إعادة تسمية الملفات دفعة واحدة باستخدام منطق مخصص
في الحالات الأكثر تعقيدًا، استخدم قاموسًا لربط أسماء الملفات القديمة بأسماء الملفات الجديدة:
directory = "/path/to/files"
renames = {
"file1.txt" => "new_file1.txt",
"file2.jpg" => "new_file2.jpg"
}
renames.each do |old_name, new_name|
old_path = File.join(directory, old_name)
new_path = File.join(directory, new_name)
begin
File.rename(old_path, new_path)
puts "تمت إعادة التسمية: #{old_path} -> #{new_path}"
rescue => e
puts "خطأ في إعادة تسمية #{old_path}: #{e.message}"
end
end
معالجة الأخطاء المتينة
قم دائمًا بتضمين معالجة شاملة للأخطاء لإدارة المشكلات مثل عدم وجود الملفات أو وجود ملفات موجودة بشكل مناسب.