تغيير ملحقات عدة ملفات دفعة واحدة في سطر أوامر اللينكس
اليوم جايب لكم درس بسيط في أوامر اللينكس يشرح كيفية تغيير ملحقات جميع الملفات الموجودة في مجلد معين دفعة واحدة.
أولا فلنفترض أنه يوجد لدي عدد كبير من الملفات بامتداد 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
أتمنى أني وفقت في الشرح
تحياتي


Ebnalblad
مشكور على الموضوع انا سعيد انك تستخدم لينوكس
الأثنين مايو 26, 2008, 02:39 مسؤال لو بدائي شوي لاني ما اتعامل مع سطر الاوامر و مبتدئ
وين بدي حط مسار المجلد بسطر يعني اذا عندي مجلد على home كيف احط مسار بالامر
for x in *.txt; do mv “$x” “${x%.txt}.doc”; done
FahadOnline
تعجبني الأسئلة التي تفيد السائل والمسؤول
الثلاثاء مايو 27, 2008, 07:45 صتصدق يا أخي لم أفكر من قبل في ذلك … فكرتك توفر الوقت الكثير
تفضل
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/
وتفضل أحد الأعضاء بإفادتي
Ebnalblad
مشكور كتير الحركة مفيدة مثل ما تفضلت
السبت مايو 31, 2008, 05:59 معذبناك معنا ان شاء الله نشوف المزيد عن من المقلات المفيدة عن لينوكس
أبو حازم الاسكندراني
يا إلهي ! لست بحاجة إلى هذه الحلقة البرمجية لتنفيذ هذا الأمر البسيط ..
بكفيك الأمر التالي:
mv *.txt *.doc
وفي ويندوز سيعمل الأمر المشابه بنفس الطريقة أيضا:
الأربعاء يوليو 16, 2008, 10:31 مmove *.txt *.doc
أو
ren *.txt *.doc
FahadOnline
ياااارجل … إنتا فينك من زماااان
والله راح أدعيلك لو أشتغل الأمر بالطريقة اللي ذكرتها
Ebnalblad
ان شاء تكون قريت رد الأخ الكريم
تحياتي
الأربعاء يوليو 16, 2008, 10:37 مأبو حازم الاسكندراني
بالمناسبة .. رددت عليك في منتدى أسئلة لينوكس بنفس جوابي هنا ; )
الأربعاء يوليو 16, 2008, 10:51 مFahadOnline
نعم رأيت ردك وأنا أقوم بتعديل الروابط
الأربعاء يوليو 16, 2008, 10:56 مEbnalblad
شفت رد لان مشتركي بتعليقات التدوينة
الخميس يوليو 17, 2008, 01:57 صمشكور اخ فهد انت والاخ ابو حازم على فكرة اتذكر اني نفذت الطريقة التي ذكرتها انت بالموضوع
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
شكرا شباب
أبو حازم الاسكندراني
عليك بكتاب Linux Shell Scripting Tutorial فهو سهل ومن 46 صحيفة فحسب.
أما إن أردت التوسع فخذ Shell Programming in 24 Hours أو Advanced Bash-Scripting Guide أو Advanced Bash-Scripting Guide وغيرهم الكثير ..
لكن لا أنصحك بإضاعة أكثر من يومين أو ثلاثة في ذلك.
الخميس يوليو 17, 2008, 10:30 ص