تغيير ملحقات عدة ملفات دفعة واحدة في سطر أوامر اللينكس

اليوم جايب لكم درس بسيط في أوامر اللينكس يشرح كيفية تغيير ملحقات جميع الملفات الموجودة في مجلد معين دفعة واحدة.

أولا فلنفترض أنه يوجد لدي عدد كبير من الملفات بامتداد txt واريد تحويل هذا الإمتداد لجميع الملفات في المجلد الحالي إلى doc

يمكن عمل ذلك باستخدام تركيبة من الأمران for x in و mv

والتركيبة هي كالتالي

for x in *.txt; do mv "$x" "${x%.txt}.doc"; done

فقط ندخل هذا الأمر في سطر الأوامر لنظام التشغيل لينكس وسيتم تعديل الإمتداد لجميع الملفات ذات الإمتداد txt إلى doc

سيناريو آخر وهو السبب الذي يجعلني أستخدم هذا الأمر دائما، الملفات بامتداد tar.gz انا استخدم حاويات الـ tar بكثرة لتجميع الملفات التي أريد رفعها لموقعي وبعد ذلك أقوم بضغطها باستخدام أداة Win-Gz فتصبح جميع الملفات تنتهي بـ tar.gz مثال لإسم ملف Pictures.tar.gz

بعد ان أقوم برفع جميع الملفات إلى موقعي أقوم باستخدام هذا الأمر بواسطة سطر الأوامر البعيد كالـ SSH الذي يوفر إمكانية استخدام جميع أوامر اللينكس على الموقع أو السيرفر البعيد بواسطة إتصال الإنترنت المتوفر والسبب الذي يدعوني لتغيير هذا المتداد أنه لاحاجة له ويجعل اسم الملف طويل قليلا حيث يمكن الإستغناء عنه بامتداد tgz والذي يوفر نفس المعلومات عن نوع الملف للبرامج عند فك الضغط كالـ WinZip أو WinRar
إذن نحن نريد حذف tar.gz من نهاية كل ملف واستبدالها بـ tgz .. لعمل ذلك نستخدم التركيبة أدناه

for x in *.tar.gz; do mv "$x" "${x%.tar.gz}.tgz"; done

أتمنى أني وفقت في الشرح

تحياتي

معلومات النشر

التاريخ
الأثنين مايو 26, 2008

الكاتب
FahadOnline

الأوسمة


1 التعقيبات

  1. 16 يوليو 2008 4:15 م

    FahadOnline.com » أرشيف » » سائق شاحنة و مبرمج كمبيوتر!! :

التعليقات 9


  1. Ebnalblad

    مشكور على الموضوع انا سعيد انك تستخدم لينوكس
    سؤال لو بدائي شوي لاني ما اتعامل مع سطر الاوامر و مبتدئ
    وين بدي حط مسار المجلد بسطر يعني اذا عندي مجلد على home كيف احط مسار بالامر
    for x in *.txt; do mv “$x” “${x%.txt}.doc”; done


  2. تعجبني الأسئلة التي تفيد السائل والمسؤول :-)
    تصدق يا أخي لم أفكر من قبل في ذلك … فكرتك توفر الوقت الكثير
    تفضل
    for x in path/to/files/*.ext1; do mv "$x" "${x%.ext1}.ext2"; done
    بحثت في القوقل ولكن لم اجد الإجابة فوضعت استفساري في هذا المنتدى
    http://www.linuxquestions.org/questions/linux-newbie-8/how-to-change-extensions-for-many-files-in-other-directory-path-644913/
    وتفضل أحد الأعضاء بإفادتي



  3. Ebnalblad

    مشكور كتير الحركة مفيدة مثل ما تفضلت
    عذبناك معنا ان شاء الله نشوف المزيد عن من المقلات المفيدة عن لينوكس



  4. أبو حازم الاسكندراني

    يا إلهي ! لست بحاجة إلى هذه الحلقة البرمجية لتنفيذ هذا الأمر البسيط ..

    بكفيك الأمر التالي:

    mv *.txt *.doc

    وفي ويندوز سيعمل الأمر المشابه بنفس الطريقة أيضا:
    move *.txt *.doc
    أو
    ren *.txt *.doc


  5. ياااارجل … إنتا فينك من زماااان

    والله راح أدعيلك لو أشتغل الأمر بالطريقة اللي ذكرتها

    Ebnalblad
    ان شاء تكون قريت رد الأخ الكريم :-)

    تحياتي



  6. أبو حازم الاسكندراني

    بالمناسبة .. رددت عليك في منتدى أسئلة لينوكس بنفس جوابي هنا ; )


  7. نعم رأيت ردك وأنا أقوم بتعديل الروابط :-)


  8. شفت رد لان مشتركي بتعليقات التدوينة
    مشكور اخ فهد انت والاخ ابو حازم على فكرة اتذكر اني نفذت الطريقة التي ذكرتها انت بالموضوع
    for x in *.tar.gz; do mv “$x” “${x%.tar.gz}.tgz”; done
    رحت لمسار الملف بالامر cd
    الامر اللي ذكرتوا بالتعليق ماضبط
    for x in path/to/files/*.ext1; do mv “$x” “${x%.ext1}.ext2″; done
    حسب ماظاهر طريقة الاخ لبو حاوم سهلة و بسيطة فقط
    mv *.txt *.doc
    شكرا شباب



  9. أبو حازم الاسكندراني

    عليك بكتاب Linux Shell Scripting Tutorial فهو سهل ومن 46 صحيفة فحسب.
    أما إن أردت التوسع فخذ Shell Programming in 24 Hours أو Advanced Bash-Scripting Guide أو Advanced Bash-Scripting Guide وغيرهم الكثير ..

    لكن لا أنصحك بإضاعة أكثر من يومين أو ثلاثة في ذلك.


إضافة تعليق