تسمية عدة ملفات في نفس الوقت

نعلم أن الوندوز يستطيع تسمية عدة ملفات في نفس الوقت بعد الضغط على F2 و اختيار اسم لتصبح جميع الملفات مرقمة بنفس الإسم و لكن ماذا عن أنظمة Linux و Unix هل يمكنه تغيير أسماء ملفات عشرات الصور في نفس الوقت, الإجابة استغرق البحث عنها يوم بأكمله من تدقيق و بحث في الكودات و السكريبتات لأستطيع أن أستخلص أنه قادر على ذلك, ليس هذا فحسب بل يستطيع تغيير اﻷسماء بأنماط أخرى بحسب طريقة تفكير مستعمله و قدرته على البرمجة


تنبيه هام : يرجى القيام بحفظ نسخة احتياطية قبل البدأ بالعملية لأن الملفات قد تحذف و لن يمكنك بعدها استعادتها



 المتطلبات: ستحتاج لمعرفة البرمجة بواسطة shell لفهم محتوى كل كود و من ثم تعديله ليتلائم مع الحالة التي تنوي استعماله فيها. سنستعمل كذلك أمر rename الذي يستعمل على Terminal و برمج بواسطة perl و قاعدة استعماله كالتالي:
rename oldname newname *.files

أي أننا سنضع الإسم القديم  ثم الإسم الجديد ثم الملفات التي سنطبقه عليها.
أمثلة عملية:

حذف الفراغ بين الكلمات
Remove all blank space with rename command
rename "s/ *//g" *.png
في هذه الحالة طبقة الكود على ملفات png أي أنك ستحتاج إلى تغييرها 
ب mp3 مثلا إذا كنت تريد تطبيقها على الصوتيات

لحذف الإمتددات 
To remove .jpg file extension
rename 's/\.jpg$//' *.jpg


تغيير امتداد
(في المثال تعويض webm ب flv)
rename 's/\.webm/\.flv/' *.webm

الكتابة بأحرف صغيرة
To convert all uppercase filenames to lowercase
rename 'y/A-Z/a-z/' *

الكتابة بأحرف كبيرة
To convert all lowercase filenames to uppercase
rename 'y/a-z/A-Z/' *

حذف اﻷرقام و تعوضها
"_" ب  
 To convert the number to _
rename 'y/0-9/_/' *.png

لحذف اﻷرقام
To remove the number
rename 'y/0-9/ /' *.png
rename "s/ *//g" *.png

 تحويل الأسماء بأخرى جديدة
#rename foo1.a,foo2.a,…,foo10.a To xxx1.a,xxx2.a,….,xxx10.a 
rename 's/foo(.*)\.a/xxx$1.avi/' *.a
حيث foo هو اﻹسم القديم 
xxx هو الإسم الجديد
*.a 
هو الإمتداد الذي سنعمل عليه
مثال لتحويل Screeshot إلى pic
rename 's/screenshot(.*)\.png/pic$1.png/' *.png
إضافة  امتداد
Add extension
for file in *; do
mv "$file" "$file".mp3;
done
و يمكن كتابته في سطر واحد على الترمنال أو عمل ملف يكون
امتداده sh.

 جعل الملفات مرقمة
gal04_1024-768_tcm251-138886.jpg 
gal05_1024-768_tcm251-138890.jpg 
gal07_1024-768_tcm251-138898.jpg 
rename these files as 1.jpg 2.jpg….

i=1
for j in *.jpg; do mv "$j" "$i.jpg" ;(( i++ )); done
j لاحتساب الملفات و i لتسميتها انطلاقا من احد






استعنت بالموقع التالي للحصول على الأمثلة

أرجو أن تكونو قد استمتعتم

هناك تعليق واحد:

  1. الف شكر على الشرح الجميل فعلا استفد كثيرا فلم اكن اعرف كيف افعل ذلك عل لينكس ... الف شكر اخى

    ردحذف