النقاط الرئيسية
- يعد الأمر “mv” أداة متعددة الاستخدامات لنقل الملفات وإعادة تسميتها، ولكنه ليس مصممًا خصيصًا لإعادة تسمية الملفات.
- عند إعادة تسمية ملفات متعددة، قد يكون استخدام “mv” معقدًا ويتطلب حيل Bash.
- البديل لـ “mv” هو أمر “rename”، والذي يوفر المزيد من المرونة والقوة لمهام إعادة تسمية الملفات.
تعرف على قوة إعادة تسمية الملفات في عالم Linux وامنحنا mv
– ونفسك – راحة. Rename
مرن وسريع، بل وأسهل أحيانًا. إليك كيفية استخدام هذا الأمر القوي.
ما هو الخطأ في mv؟
لا يوجد شيء خاطئ في mv
. الأمر يفعل وظيفة جيدة، وهو موجود في جميع توزيعات Linux، وفي macOS، وفي أنظمة تشغيل أخرى شبيهة بنظام Unix. لذا فهو متاح دائمًا. ولكن في بعض الأحيان تحتاج فقط إلى جرافة، وليس مجرفة.
ال mv
إن الأمر له هدف في الحياة، وهو نقل الملفات. ومن الآثار الجانبية السعيدة أنه يمكن استخدامه لنقل ملف موجود إلى ملف جديد باسم جديد. والنتيجة النهائية هي إعادة تسمية الملف، وبالتالي نحصل على ما نريد. ولكن mv
ليست أداة مخصصة لإعادة تسمية الملفات.
إعادة تسمية ملف واحد باستخدام mv على Linux
للإستخدام mv
لإعادة تسمية نوع الملف mv
، مسافة، اسم الملف، مسافة، والاسم الجديد الذي تريد أن يحمله الملف. ثم اضغط على Enter.
يمكنك استخدام ls
للتحقق من إعادة تسمية الملف.
mv oldfile.txt newfile.txt
ls *.txt
إعادة تسمية ملفات متعددة باستخدام mv
تصبح الأمور أكثر تعقيدًا عندما تريد إعادة تسمية ملفات متعددة. mv
لا يمتلك البرنامج القدرة على التعامل مع إعادة تسمية ملفات متعددة. يجب عليك اللجوء إلى استخدام بعض حيل Bash الرائعة. لا بأس بذلك إذا كنت تعرف بعض مهارات سطر الأوامر متوسطة المستوى، ولكن تعقيد إعادة تسمية ملفات متعددة باستخدام mv
يتناقض بشكل صارخ مع سهولة الاستخدام mv
لإعادة تسمية ملف واحد.
الأمور تتطور بسرعة.
لنفترض أن لدينا دليلاً يحتوي على مجموعة متنوعة من الملفات من أنواع مختلفة. بعض هذه الملفات لها امتداد “.prog”. نريد إعادة تسميتها في سطر الأوامر بحيث يكون لها امتداد “.prg”.
كيف نتجادل mv
هل تريد أن تفعل ذلك من أجلنا؟ دعنا نلقي نظرة على الملفات.
ls *.prog -l
إليك طريقة واحدة للقيام بذلك دون اللجوء إلى كتابة ملف نصي Bash فعلي.
for f in *.prog; do mv -- "$f" "${f%.prog}.prg"; done
هل نجح ذلك؟ دعنا نتحقق من الملفات ونرى.
ls *.pr*
حسنًا، نعم، نجح الأمر. أصبحت جميع الملفات بامتداد “.prg” الآن، ولا توجد ملفات بامتداد “.prog” في الدليل.
ماذا حدث للتو؟
ماذا فعلت هذه الأوامر الطويلة في الواقع؟ دعونا نوضحها بالتفصيل.
for f in *.prog; do mv -- "$f" "${f%.prog}.prg"; done
يبدأ الجزء الأول حلقة ستقوم بمعالجة كل ملف “.prog” في الدليل، بالتناوب.
الجزء التالي يوضح ما ستفعله المعالجة. إنها تستخدم mv
لنقل كل ملف إلى ملف جديد. سيتم تسمية الملف الجديد باسم الملف الأصلي باستثناء الجزء “.prog”. سيتم استخدام امتداد جديد “.prg” بدلاً من ذلك.
وينهي الجزء الأخير الحلقة بعد معالجة كل ملف.
استخدم rename لإعادة تسمية ملف على Linux
بالتأكيد. إنه rename
يأمر.
rename
لا يعد هذا الأمر جزءًا من توزيعات Linux القياسية، لذا ستحتاج إلى تثبيته. كما أن له اسمًا مختلفًا في عائلات Linux المختلفة، ولكنها تعمل جميعًا بنفس الطريقة. سيتعين عليك فقط استبدال اسم الأمر المناسب وفقًا لنكهة Linux التي تستخدمها.
في توزيعات Ubuntu وDebian المشتقة، يمكنك تثبيت rename
مثله:
sudo apt-get install rename
في التوزيعات المشتقة من Fedora وRedHat، يمكنك تثبيت prename
مثل هذا. لاحظ الحرف “p” الأولي، والذي يرمز إلى Perl.
sudo dnf install prename
لتثبيته في Manjaro Linux، استخدم الأمر التالي. لاحظ أن أمر إعادة التسمية يسمى perl-rename
.
sudo pacman -Syu perl-rename
دعونا نفعل ذلك مرة أخرى
وهذه المرة سوف نستخدم rename
سنقوم بإرجاع عقارب الساعة إلى الوراء حتى يكون لدينا مجموعة من ملفات “.prog”.
ls *.prog
الآن دعنا نستخدم الأمر التالي لإعادة تسميتهم. ثم سنتحقق من ذلك باستخدام ls
هل نجح الأمر؟ تذكر أن تستبدل rename
مع اسم الأمر المناسب لنظام Linux الخاص بك إذا كنت لا تستخدم Ubuntu أو Linux المشتق من Debian.
rename 's/.prog/.prg/' *.prog
ls *.pr*
لقد نجح الأمر، والآن أصبحت جميعها ملفات “.prg”، ولم يتبق أي ملفات “.prog” في الدليل.
ماذا حدث هذه المرة؟
دعونا نشرح هذا الجزء من السحر، في ثلاثة أجزاء.
الجزء الأول هو اسم الأمر، rename
(أو prename
أو perl-rename
(بالنسبة للتوزيعات الأخرى).
الجزء الأخير هو *.prog
، الذي يخبرنا rename
للعمل على كافة ملفات “.prog”.
يحدد الجزء الأوسط العمل الذي نريد القيام به على كل اسم ملف. s
يعني البديل. المصطلح الأول (.prog
) هو ما rename
سيتم البحث في كل اسم ملف عن المصطلح الثاني (.prg
) هو ما سيتم استبداله به.
الجزء الأوسط من الأمر، أو التعبير المركزي، هو Perl ‘تعبير منتظم“وهذا ما يعطي” rename
تتمتع بالمرونة.
تغيير أجزاء أخرى من اسم الملف
لقد قمنا بتغيير امتدادات أسماء الملفات حتى الآن، دعونا نقوم بتعديل الأجزاء الأخرى من أسماء الملفات.
يوجد في الدليل عدد كبير من ملفات أكواد المصدر بلغة C. جميع أسماء الملفات مسبوقة بـ “slang_”. يمكننا التحقق من ذلك باستخدام ls
.
ls sl*.c
سنستبدل جميع تكرارات “slang_” بـ “sl_”. تنسيق الأمر مألوف لنا بالفعل. كل ما نقوم به هو تغيير مصطلح البحث ومصطلح الاستبدال ونوع الملف.
rename 's/slang_/sl_/' *.c
هذه المرة نبحث عن ملفات “.c” ونبحث عن “slang_”. كلما تم العثور على “slang_” في اسم ملف، يتم استبداله بـ “sl_”.
يمكننا التحقق من نتيجة هذا الأمر عن طريق تكرار ls
الأمر من الأعلى بنفس المعلمات:
ls sl*.c
حذف جزء من اسم الملف
يمكننا إزالة جزء من اسم الملف عن طريق استبدال مصطلح البحث بلا شيء.
ls *.c
rename 's/sl_//' *.c
ls *.c
يمكننا أن نرى من ls
الأمر بأن يتم إضافة “sl_” إلى جميع ملفات “.c” الخاصة بنا. دعنا نتخلص من ذلك تمامًا.
ال rename
يتبع الأمر نفس التنسيق السابق. سنبحث عن ملفات بعلامة “.c”. مصطلح البحث هو “sl_”، ولكن لا يوجد مصطلح استبدال. وجود شرطتين عكسيتين بدون أي شيء بينهما لا يعني شيئًا، بل سلسلة فارغة.
rename
سيقوم بمعالجة كل ملف “.c” بدوره. سيبحث عن “sl_” في اسم الملف. إذا تم العثور عليه، فسيتم استبداله بلا شيء. بعبارة أخرى، سيتم حذف مصطلح البحث.
الاستخدام الثاني لـ ls
يؤكد الأمر أنه تمت إزالة البادئة “sl_” من كل ملف “.c”.
تقييد التغييرات على أجزاء معينة من أسماء الملفات
دعونا نستخدم ls
للبحث عن الملفات التي تحتوي على السلسلة “param” في اسم الملف الخاص بها. بعد ذلك سنستخدم rename
لاستبدال هذه السلسلة بالسلسلة “parameter”. سنستخدم ls
مرة أخرى لرؤية التأثير rename
كان الأمر على تلك الملفات.
ls *param*
rename 's/param/parameter/' *.c
ls *param*
تم العثور على أربعة ملفات تحتوي على “param” في اسم الملف الخاص بها. تحتوي ملفات param.c وparam_one.c وparam_two.c على “param” في بداية اسمها. يحتوي ملف third_param.c على “param” في نهاية اسمه، قبل الامتداد مباشرة.
ال rename
سيقوم الأمر بالبحث عن “param” في كل مكان في اسم الملف، واستبداله بـ “parameter” في جميع الحالات.
الاستخدام الثاني لـ ls
يوضح لنا الأمر أن هذا هو ما حدث بالضبط. سواء كان “param” في بداية أو نهاية اسم الملف، فقد تم استبداله بـ “parameter”.
يمكننا استخدام الأحرف الوصفية في لغة Perl لتحسين سلوك التعبير الأوسط. الأحرف الوصفية هي رموز تمثل مواضع أو تسلسلات من الأحرف. على سبيل المثال، ^
يعني “بداية السلسلة” $
تعني “نهاية السلسلة” و .
يعني أي حرف مفرد (باستثناء حرف السطر الجديد).
سنستخدم بداية الحرف الأولي للسلسلة ( ^
) لتقييد بحثنا على بداية أسماء الملفات.
ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c
يتم سرد الملفات التي قمنا بإعادة تسميتها سابقًا، ويمكننا رؤية السلسلة “parameter” في بداية ثلاثة أسماء ملفات وفي نهاية أحد أسماء الملفات.
ملكنا rename
يستخدم الأمر بداية السطر (^
) حرف ميتا قبل مصطلح البحث “المعلمة”. هذا يخبرك rename
لن يتم اعتبار مصطلح البحث موجودًا إلا إذا كان في بداية اسم الملف. سيتم تجاهل سلسلة البحث “parameter” إذا كانت في أي مكان آخر في اسم الملف.
التحقق مع ls
يمكننا أن نرى أن اسم الملف الذي كان يحتوي على “parameter” في نهاية اسم الملف لم يتم تعديله، ولكن أسماء الملفات الثلاثة التي كانت تحتوي على “parameter” في بداية أسمائها تم استبدال سلسلة البحث الخاصة بها بالمصطلح البديل “value”.
قوة rename
تكمن قوة بيرل في كل شيء قوة بيرل تحت تصرفكم.
البحث باستخدام التجميعات
rename
لا يزال هناك المزيد من الحيل في جعبته. دعنا نفكر في الحالة التي قد يكون لديك فيها ملفات تحتوي على سلاسل متشابهة في أسمائها. إنها ليست نفس السلاسل تمامًا، لذا فإن البحث البسيط والاستبدال لن ينجح هنا.
في هذا المثال نستخدم ls
للتحقق من الملفات التي لدينا والتي تبدأ بـ “str”. هناك اثنان منها، string.c وstrangle.c. يمكننا إعادة تسمية السلسلتين في وقت واحد باستخدام تقنية تسمى التجميع.
التعبير المركزي عن هذا rename
سيبحث الأمر عن سلاسل داخل أسماء الملفات التي تحتوي على تسلسل الأحرف “stri” أو “stra” حيث تتبع هذه التسلسلات على الفور “ng”. بعبارة أخرى، سيبحث مصطلح البحث لدينا عن “string” و”strang”. مصطلح الاستبدال هو “bang”.
ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c
استخدام ls
يؤكد المرة الثانية أن string.c أصبح bang.c وأن strangle.c أصبح الآن bangle.c.
استخدام الترجمات مع إعادة التسمية
ال rename
يمكن للأمر تنفيذ إجراءات على أسماء الملفات تسمى الترجمات. ومن الأمثلة البسيطة على الترجمة إجبار مجموعة من أسماء الملفات على الكتابة بأحرف كبيرة.
في rename
لاحظ الأمر أدناه أننا لا نستخدم s/
لبدء التعبير المركزي، نستخدم y/
. هذا يخبرنا rename
نحن لا نقوم بالاستبدال، بل نقوم بالترجمة.
ال a-z
المصطلح هو تعبير Perl الذي يعني جميع الأحرف الصغيرة في التسلسل من a إلى z. وبالمثل، A-Z
يمثل المصطلح جميع الأحرف الكبيرة في التسلسل من A إلى Z.
يمكن إعادة صياغة التعبير المركزي في هذا الأمر على النحو التالي: “إذا تم العثور على أي من الأحرف الصغيرة من a إلى z في اسم الملف، فاستبدلها بالأحرف المقابلة من تسلسل الأحرف الكبيرة من A إلى Z”.
لإجبار أسماء الملفات “.prg” على أن تكون بأحرف كبيرة، استخدم هذا الأمر:
إعادة تسمية ‘y/az/AZ/’ *.prg
ls *.PRG
ال ls
يُظهِر لنا الأمر أن جميع أسماء الملفات “.prg” أصبحت الآن بأحرف كبيرة. في الواقع، لكي نكون دقيقين تمامًا، لم تعد هذه الملفات “.prg”. إنها ملفات “.PRG”. Linux حساس لحالة الأحرف.
يمكننا عكس هذا الأمر الأخير عن طريق عكس موضع a-z
و A-Z
المصطلحات في التعبير المركزي.
إعادة تسمية ‘y/AZ/az/’ *.PRG
ls *.prg
لن تتعلم لغة بيرل في خمس دقائق
إن تعلم لغة Perl هو أمر يستحق الوقت. ولكن البدء في استخدام إمكانيات توفير الوقت التي تقدمها rename
من أجل الحصول على فوائد كبيرة في القوة والبساطة والوقت، لا تحتاج إلى أن يكون لديك الكثير من المعرفة بلغة Perl على الإطلاق.