পুনরায় নাম ব্যবহার করে, অনুসন্ধানের অংশটি রেখেছি ge


8

সকাল,

আমার যে বর্তমান প্রকল্পটিতে কাজ করতে হবে তার একটি পূর্ববর্তী নামকরণ প্রকল্প ছিল যা আমাকে বিরক্ত করে ...

Base.v2.c
Base.v2a.c
Slider.v4a.h
Area.v2a.2.h

আমাকে সংস্করণে "এ" বলা হয়েছে "আলফা" সংস্করণগুলি চিহ্নিত করা যাতে আরও কাজের প্রয়োজন ছিল। প্রকল্পের এই পর্যায়ে আমি "এ" মুছে ফেলতে এবং এটি ".1" (v2a -> v2.1) দিয়ে প্রতিস্থাপন করতে পারি।

আমি নিজে নিজে যা করতে ইচ্ছুক তার বাইরে অনেকগুলি ফাইল রয়েছে।

আমি জানি যে আমি একবারে সমস্ত ফাইলের নাম পরিবর্তন করতে পুনরায় নামকরণ কমান্ডটি ব্যবহার করতে পারি, তবে কীভাবে এটি করা যায় তা নিয়ে আমি একটি সমস্যা নিয়ে চলেছি। আমি যদি এরকম কিছু ব্যবহার করি:

rename 's/[0-9]a/.1/' *

তাহলে আমি সংস্করণ সংখ্যার শেষ সংখ্যাটি হারাব। পুনরায় নামকরণের কোনও উপায় আছে (বা অন্য কোনও কমান্ড লাইন সরঞ্জাম) ফাইলটি খুঁজে পাওয়ার জন্য ব্যবহৃত রেগেক্সের কিছু অংশ মনে রাখবে? যাতে '[0-9] a' থেকে '[0-9] .1' 1 এ 1.1, এবং 4 এ 4.1, ইত্যাদিতে পরিবর্তন হয়ে যায় etc.


এটি একটি খারাপ ধারণা। সাধারণত v2a < v2 < 2.1। অন্য কথায় সংস্করণ দ্বি-আলফাটি সংস্করণটিকে দ্বিতীয় সংস্করণ নয়, তার পরে সংস্করণ নয় version সংস্করণে 1.99বা এর অনুরূপ কিছুতে এর নামকরণ করা ভাল ।
jpaugh

উত্তর:


15

আপনি হয় ক্যাপচার গ্রুপগুলি ব্যবহার করতে পারেন :

$ rename -n 's/(\d)a/$1.1/' *
Area.v2a.2.h -> Area.v2.1.2.h
Base.v2a.c -> Base.v2.1.c
Slider.v4a.h -> Slider.v4.1.h

অথবা আপনি একটি চেহারা পিছনে ব্যবহার করতে পারেন :

$ rename -n 's/(?<=\d)a/.1/' *
Area.v2a.2.h -> Area.v2.1.2.h
Base.v2a.c -> Base.v2.1.c
Slider.v4a.h -> Slider.v4.1.h

বা, একটি চেহারা পিছনের অনুরূপ, 0-দৈর্ঘ্যের জোর, \Kযার অর্থ "এই বিন্দু না হওয়া পর্যন্ত সবকিছু মিলে যায়":

$ rename -n 's/\d\Ka/.1/' *
Area.v2a.2.h -> Area.v2.1.2.h
Base.v2a.c -> Base.v2.1.c
Slider.v4a.h -> Slider.v4.1.h

মনে রাখবেন যে আমি এর \dপরিবর্তে সংক্ষিপ্ত ব্যবহার করেছি [0-9]। দুটি সমান, তবে renameপার্ল স্ক্রিপ্ট, তাই পার্ল সামঞ্জস্যপূর্ণ নিয়মিত এক্সপ্রেশন (পিসিআরই) এর বাক্য গঠনটি বোঝে।

দ্রষ্টব্য যে এটি কেবল একটি এর পরে সংখ্যার প্রথম ঘটনাটি পরিবর্তন করবে a। এটি আপনার ফাইলের নামের উপর নির্ভর করে আপনার যা প্রয়োজন তা হতে পারে বা নাও হতে পারে।

-nতোলে renameকি এটা আসলে কিছু কাজ ছাড়া করতে হবে প্রদর্শন করুন। একবার আপনি নিশ্চিত করেছেন যে এটি প্রত্যাশার মতো কাজ করে, আসলে ফাইলের নাম পরিবর্তন করতে এটি সরান।


8

কমান্ডটি এভাবে পরিবর্তন করুন:

rename 's/([0-9])a/$1.1/' *
  • প্রতিস্থাপনের আদেশটি s/<souce>/<replacement>/প্রতিস্থাপনের স্ট্রিং সহ উত্সের স্ট্রিং (এটি একটি নিয়মিত প্রকাশ হতে পারে) প্রতিস্থাপন করবে।
  • ক্যাপচার গ্রুপ - উৎস স্ট্রিংটি বন্ধনী দিয়ে ঘিরা করছে অংশ: (regexp), (string), ইত্যাদি ধারাবাহিক ভেরিয়েবল মান হিসাবে নির্ধারিত হবে: $1, $2, ইত্যাদি ..
  • সুতরাং, প্রতিস্থাপনের স্ট্রিংয়ের মধ্যে, ভেরিয়েবলটি $1এর মান দিয়ে প্রসারিত হবে , এক্ষেত্রে অবশ্যই রিজেক্সের সাথে মেলে [0-9]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.