إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

إعادة تسمية عدة ملفات باستخدام mv

تقليص
X
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [شرح] إعادة تسمية عدة ملفات باستخدام mv

    لينكس على السّريع : إعادة تسمية الملفات باستخدام mv


    تذكير بالموضوع السابق :استعراض وقتل العمليات الأكثر استهلاكا
    يتوفر لينكس على أداتين قويتين لتغيير أسماء الملفات، سنتحدث عن إحداها في هذا الموضوع وهي الأمر mv، والأخرى هي الأمر rename سنتناولها في الموضوع القادم إن شاء الله. إذن سنتحدث في هذا الموضوع عن إعادة تسمية مجموعة من الملفات دفعة واحدة باستخدام الأمر mv وبمساعدة حلقات التكرارfor loops
    بيد أنّنا سنبدأ أولا بشرح مبسط عن استخدام الأمر mv وكذلك حلقات التكرار، لننتقل بعد ذلك للشرح الأساسي .

    الأمر mv



    الأمر mv يُستعمل لنقل أو إعادة تسمية الملفات
    حينما نستخدمه بالشكل التالي – باعتبار أنه لايوجد أي ملف أو مجلد يحمل الإسم file2 في المسار الذي تتم فيه العملية – :
    كود:
    mv file1 file2
    فهو يقوم بإعادة تسمية الملف file1 إلى file2
    وإذا استخدمناه بهذه الطريقة :
    كود:
    mv file ... directory
    فهو يقوم بنقل ملف أو أكثر للمجلد directory

    بعض خيارات الأمر :
    -i : طلب موافقة المستخدم قبل استبدال ملف موجود مسبقا، في حالة عدم استخدام هذا الخيار وقمت مثلا بتسمية ملف بنفس اسم ملف موجود مسبقا سيتم استبدال هذا الأخير بدون إذن منك
    -v : تفعيل وضع verbose ليتم إظهار ما يقوم به الأمر .

    حلقة التكرارFor



    حلقات التكرار هي جزء لايتجزأ في أية لغة برمجة وكذلك الأمر بالنسبة لshell scripting فهي تسهل علينا العديد من الأمور لتنفيذ عدة مهام في أمر واحد ؛ الشيء الذي سنحتاجه حتى لو كنا مجرد مستخدمين عاديين للنظام يعني ليس بالضرورة لكتابة السكربتات والأعمال البرمجية.
    طريقة استخدام حلقة تكرار من نوع for :
    كود:
    for variable in words do commands done
    words هي قائمة بالعناصر التي سيأخذها المتغير variable بشكل تسلسلي أثناء تكرار الحلقة‬
    commands هي قائمة بالأوامر التي ستُنفذ أثناء تكرار الحلقة
    أو يمكن وضع كل شيء في سطر واحد بالشكل التالي :
    كود:
    for variable in words ; do commands ; done
    أمثلة لاستخدامها :

    مثال 1
    كود:
    for variable in 'variable1' 'variable2' 'variable3' do echo $variable done
    الناتج :
    كود:
    variable1 variable2 variable3

    مثال 2
    كود:
    for file in `ls` do echo $file done
    الناتج على حسب الملفات الموجودة في المسار الحالي :
    كود:
    Apps Bureau Documents Images Modèles mots.odt Musique nfs Public Téléchargements Vidéos ydownloader

    مثال 3

    كود:
    for i in {A..D}; do echo $i; done
    الناتج :
    كود:
    A B C D
    الشرح الأساسي



    أولا فلننشئ مجلدا نسميه مثلا test لنجري فيه تجاربنا حتى لايؤدي ذلك إلى مس ملفاتنا الشخصية ، وننشئ داخله عشرة ملفات.
    كود:
    mkdir test; cd test ; touch {1..10}.txt
    بتطبيق الأمر ls سنجد :
    كود:
    10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
    الآن سنجري عملية إعادة تسمية بسيطة بتحديد كل الملفات ذات الامتداد .txt وإضافة -old في آخرها :
    كود:
    for file in *.txt do mv $file $file-old done
    ستصبح أسماء الملفات كالتالي :
    كود:
    10.txt-old 2.txt-old 4.txt-old 6.txt-old 8.txt-old 1.txt-old 3.txt-old 5.txt-old 7.txt-old 9.txt-old
    الآن نريد مثلا حذف -old من أسماء هذه الملفات، سنقوم باستخدام ما يسمى بالتوسعات الخاصة بعمليات البحث والاستبدال شبيهة قليلا بما يقوم به الأمر sed :
    كود:
    for i in `ls`;do mv $i ${i/-old/} ; done
    تجري هذه التوسعة عملية بحث واستبدال لمحتويات المتغير $i إذا وجد النص -old في إسم المتغير يتم استبداله بلا شيء، طبعا كان في مقدورنا استبداله بكلمة أخرى مثلا -new :
    كود:
    for i in `ls`;do mv $i ${i/-old/-new} ; done
    كما تلاحظون في قائمة العناصر التي يأخذها المتغير i لم نضع *.txt لأن امتدادها لم يعد كذلك لهذا استخدمنا `ls`
    الآن عادت أسماء الملفات إلى بدايتها
    كود:
    10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
    الآن نود مثلا تغيير امتداداتها من .txt إلى .png ، سيرد علي أحدهم قائلا باستهتار :
    هههههههههههه بسيطة : mv *.txt *.png
    سأجيبه :
    هههههههههههههههه أنت مخطئ
    نعم بالفعل هذا الأمر لايقوم بالمطلوب ولمزيد من المعلومات إليكم هذا الموضوع
    لتغيير امتداداتها سنقوم باستخدام الطريقة التالية :
    كود:
     for i in *.txt; do mv $i ${i/%.txt/.png} ; done

    المعامل % يعني تواجد النص المطلوب في نهاية محتوى المتغير لتتم عملية الاستبدال في نهاية الاسم
    الآن نود مثلا إضافة بعض حقوقنا على هذه الملفات لنضع اسمنا في بداية اسم كل ملف
    كود:
    for i in *.png ; do mv $i "$USER-$i" ; done
    كما ترون فقد استخدمنا متغير البيئة $USER الذي يُعوض باسم المستخدم الخاص بنا
    نتيجة الأمر ls بعد تنفيذ الأمر السابق بالنسبة لي هي :
    كود:
                                                  
    otmangx-10.png otmangx-2.png otmangx-4.png otmangx-6.png otmangx-8.png otmangx-1.png otmangx-3.png otmangx-5.png otmangx-7.png otmangx-9.png



    آخر مثال في موضوعنا سيكون حول إزالة اسم المستخدم من بداية أسماء هذه الملفات ولأجل هذا سنستخدم الأمر التالي :
    كود:
    for i in *.png; do mv $i ${i/#$USER-/} ; done
    العلامة # عند استخدامها فهي عكس % التي استخدمناها قبل قليل ، أي أنها تقارن تواجد النص المطلوب في بداية محتوى المتغير لتتم عملية الاستبدال بعدها


    الموضوع القادم بإذن الله سيكون حول الأمر rename

  • #2
    تمت الجدولة للعرض بصفحتنا بفيسبوك ، شكرًا جزيلًا .
    (لَا تَحْسَبَنَّ الَّذِينَ يَفْرَحُونَ بِمَا أَتَوا وَّيُحِبُّونَ أَن يُحْمَدُوا بِمَا لَمْ يَفْعَلُوا فَلَا تَحْسَبَنَّهُم بِمَفَازَةٍ مِّنَ الْعَذَابِ وَلَهُمْ عَذَابٌ أَلِيمٌ)
    آل عمران 188
    قال رسول الله صلى الله عليه و سلم :
    {لا يشكر الله من لا يشكر الناس}
    {من كان يؤمن بالله واليوم الآخر،فليقل خيراً أو ليصمت}

    جميع المساهمات الحاملة لهذا التوقيع تخضع لرخصة وقف
    أسأل الله العظيم رب العرش العظيم أن يحسن من حال أمتي

    تعليق

    يعمل...
    X