একটি ম্যাকোস টার্মিনালে ফাইলের পুনর্নামকরণ ফাইলগুলি কীভাবে করবেন?


123

আমার নামের একটি সিরিজের ফাইলগুলির একটি ফোল্ডার রয়েছে:

prefix_1234_567.png
prefix_abcd_efg.png

আমি ব্যাচটিকে একটি আন্ডারস্কোর এবং মাঝের সামগ্রীটি সরিয়ে ফেলতে চাই যাতে ফলাফলটি হয়:

prefix_567.png
prefix_efg.png

প্রাসঙ্গিক তবে সম্পূর্ণ ব্যাখ্যামূলক নয়:


এনএসএসটিং এবং এনএস মিউটেবল স্ট্রিংয়ের ব্যাপ্তি এবং স্ট্রিংয়ের পদ্ধতিগুলি দেখুন
গ্রেডি প্লেয়ার

1
আপনি কি এর নন-টার্মিনাল সমাধানগুলি বিবেচনা করেছেন? একটি অটোমেটার ওয়ার্কফ্লো সহজেই এই ধরণের ক্রিয়াকলাপ সম্পাদন করতে পারে। আপনি সমস্ত ফাইলের নাম পরিবর্তন করতে এবং _*_একটি ফাঁকা দিয়ে পাঠ্যটি প্রতিস্থাপন করতে একটি স্বয়ংক্রিয় ওয়ার্কফ্লো তৈরি করতে পারেন ।
এনক্রিপ্টিক

আমি ভেবেছিলাম
অটোমেটর

উত্তর:


234

আপনার নির্দিষ্ট ক্ষেত্রে আপনি নিম্নলিখিত bashকমান্ডটি ব্যবহার করতে পারেন ( bashম্যাকোজে ডিফল্ট শেল):

for f in *.png; do echo mv "$f" "${f/_*_/_}"; done

নোট: যদি সেখানে একটা সুযোগ আপনার ফাইলের নামের দিয়ে শুরু -, স্থান -- তাদের পূর্বে [1]:
mv -- "$f" "${f/_*_/_}"

দ্রষ্টব্য: একটি শুকনো রান সঞ্চালন করার echoজন্য mvতাই প্রস্তুত করা হয়। প্রকৃত নামকরণ করতে এটি সরান।

আপনি এটি কমান্ড লাইন থেকে চালাতে পারেন বা স্ক্রিপ্টে এটি ব্যবহার করতে পারেন।

  • "${f/_*_/_}"bash প্যারামিটার সম্প্রসারণের একটি অ্যাপ্লিকেশন : (প্রথম) সাবস্ট্রিংয়ের মিলের প্যাটার্নটি _*_আক্ষরিক সাথে প্রতিস্থাপন করা হয় _, কার্যকরভাবে নাম থেকে মাঝের টোকেনটি কেটে।
  • নোট যে _*_একটি প্যাটার্ন (একটি ওয়াইল্ডকার্ড এক্সপ্রেশন, এছাড়াও গ্লোব্বিংয়ের জন্য ব্যবহৃত), নিয়মিত প্রকাশ নয় (নিদর্শন সম্পর্কে শিখতে, চালনা man bashএবং সন্ধানের জন্য Pattern Matching)।

আপনি যদি নিজেকে ঘন ঘন ব্যাচ-নামকরণের ফাইলগুলি খুঁজে পান তবে পার্ল-ভিত্তিক renameইউটিলিটি যেমন একটি বিশেষ সরঞ্জাম ইনস্টল করার বিষয়টি বিবেচনা করুন । ম্যাকোজে আপনি নীচে জনপ্রিয় প্যাকেজ ম্যানেজার হোমব্রু ব্যবহার করে এটি ইনস্টল করতে পারেন :

brew install rename

এখানে শীর্ষে কমান্ডের সমতুল্য ব্যবহার করে rename:

rename -n -e 's/_.*_/_/'  *.png

আবার, এই আদেশটি একটি শুকনো রান সঞ্চালন করে; -nপ্রকৃত নাম পরিবর্তন করতে সরান ।

  • bashসমাধানের অনুরূপ , s/.../.../পাঠ্য প্রতিস্থাপন সম্পাদন করে, তবে - এর বিপরীতে bash- সত্যিকারের নিয়মিত এক্সপ্রেশন ব্যবহার করা হয়।

[1] বিশেষ যুক্তি উদ্দেশ্য --, যা সবচেয়ে ইউটিলিটি দ্বারা সমর্থিত, যে পরবর্তী আর্গুমেন্ট হিসাবে চিকিত্সা করা উচিত সংকেত হয় operands (মান), এমনকি যদি তারা চেহারা মত অপশন কারণে দিয়ে শুরু করতে -, যেমন জ্যাকব সি নোট।


3
দুর্দান্ত উত্তর, পুরোপুরি কাজ। আমি এও প্রশংসা করি যে আপনি ফিরে গিয়ে এটিকে সম্পাদন করে এর আরও ব্যাখ্যা দিয়েছিলেন এবং যদি আমি এটির পুনরাবৃত্তি করি তবে আরও মার্জিত সমাধান সরবরাহ করুন। আবার, অনেক ধন্যবাদ, খুব সহায়ক
কিডনিম

4
ম্যাচ প্রতিস্থাপন ( .*-> $1) ব্যবহার করে একটি উদাহরণ , উদাহরণস্বরূপ এর নাম পরিবর্তন Foo bar S01E01 biz baz.extকরুন S01E01.ext:rename -n -e 's/.*(S[0-9]{2}E[0-9]{2}).*(\.[a-z]{2,4})/$1$2/' *
স্টিভ রবিনস

2
echoশুকনো রান জন্য ব্যবহার করার ধারণা ভালবাসুন । বখশিশের জন্য ধন্যবাদ!
জেমস রাইট

অত্যন্ত মাত্র করছেন সুপারিশbrew install rename
ক্রিস রেডফোর্ড

98

ফাইলগুলির নাম পরিবর্তন করতে, আপনি renameইউটিলিটিটি ব্যবহার করতে পারেন :

brew install rename

উদাহরণস্বরূপ, বর্তমান ডিরেক্টরিতে সমস্ত ফাইলের নামের একটি অনুসন্ধানের স্ট্রিং পরিবর্তন করতে:

rename -nvs searchword replaceword *

পরিবর্তনগুলি প্রয়োগ করতে 'এন' প্যারামিটারটি সরান।

অধিক তথ্য: man rename


1
OS XGNU bash( x86_64-আপেল-ডারউইন ) এর সংস্করণগুলিতে পুনরায় নামকরণের ইউটিলিটি অন্তর্ভুক্ত নয়।
L'মধ্যে L'ঠ

4
ধন্যবাদ, হ্যাঁ এটির মাধ্যমে ইনস্টল করা দরকারbrew install rename
ডেভিড থমাস

2
এই টিপটি দুর্দান্ত! আমি টাইপ করেছি rename -vs GLYCOPHORIN GLYCC *এবং এখন এটি স্বয়ংক্রিয়ভাবে 450+ ফাইলের নাম পরিবর্তন করে। এবং সুপার দ্রুত।
স্যান্ডার ডাব্লু ভ্যান ডের লান

3
অসাধারণ! "কী বদলে যাবে" অংশটি ভালোবাসুন এটির আগে জিনিসটির নাম পরিবর্তন করে দিন!
বেন ডাফিন

3
আপনি পাশাপাশি একটি রেজেক্স ব্যবহার করতে পারেন। 's / 123 / onetwothree / g' * এর নাম পরিবর্তন করুন
ব্রায়ান

12

আপনি সেড ব্যবহার করতে পারেন:

ls * | sed -e 'p;s@_.*_@_@g' | xargs -n2 mv

ফলাফল:

prefix_567.png prefix_efg.png

* প্রথমে শুকনো রান mvকরতে, শেষে দিয়ে প্রতিস্থাপন করুনecho

ব্যাখ্যা:

  • e: 1চ্ছিক শুধুমাত্র 1 সেড কমান্ডের জন্য।
  • পি: এসডে ইনপুট প্রিন্ট করতে, এক্ষেত্রে এটি কোনও নামকরণের আগে আসল ফাইলের নাম হবে
  • @: হ'ল আরও পঠনযোগ্য করার জন্য / চরিত্রের একটি প্রতিস্থাপন। অর্থাৎ, সেড এস / অনুসন্ধান / রিপ্লেজ / জি ব্যবহার করার পরিবর্তে এস @ অনুসন্ধান @ রিপ্লেজ @ জি ব্যবহার করুন
  • _। *: আন্ডারস্কোরটি হ'ল প্রকৃত উল্লেখ করার জন্য একটি পালানোর চরিত্র। ' অক্ষর শূন্য বা আরও বেশি বার (রেগেক্সে কোনও চরিত্রের বিপরীতে)
  • -n2: ইঙ্গিত করে যে এখানে 2 আউটপুট রয়েছে যা পরামিতি হিসাবে এমভিতে প্রেরণ করা দরকার। ls থেকে প্রতিটি ইনপুটের জন্য , এই সেড কমান্ডটি 2 আউটপুট উত্পন্ন করবে যা পরে এমভিতে সরবরাহ করা হবে।

1
চতুর, যদি কিছুটা সমাধান হয়। এটিকে আরও সাধারণ করা, যাতে এম্বেড থাকা স্পেস সহ ফাইলের নামগুলি সমর্থন করার জন্য আরও বেশি তীরচিহ্ন পাওয়া যায়: ls * | xargs -I % bash -c 'echo mv "%" "$(sed 's@_.*_@_@' <<<"%")"'( echoপ্রকৃত নাম পরিবর্তন করতে মুছুন)।
mklement0

2
রহস্যময়? আমি এটা ভালোবাসি!
বিলাল আকিল

7

আমার কাছে এমন ব্যাচের একটি ফাইল ছিল যা দেখতে দেখতে: be90-01.png এবং ড্যাশটি আন্ডারস্কোরে পরিবর্তন করা দরকার। আমি এটি ব্যবহার করেছি, যা ভাল কাজ করেছে:

for f in *; do mv "$f" "`echo $f | tr '-' '_'`"; done

2

আপনি renameব্যবহার করে কমান্ড ইনস্টল করতে পারেন brew। ঠিক আছে brew install renameএবং এটি ব্যবহার করুন।


1

ব্যবহার mmv

mmv '*_*_*' '#1_#3' *.png

আপনাকে প্রথমে ইনস্টল করতে হবে sudo apt-get install mmv
αғsнιη

1
এটি দেওয়া হয়েছিল ওএস এক্স, সঠিক ইনস্টলেশন প্রক্রিয়াটি brew install mmv
buckaroo1177125

1

এটা চেষ্টা কর

for i in *.png ; do mv "$i" "${i/remove_me*.png/.png}" ; done

এখানে অন্য উপায়:

for file in Name*.png; do mv "$file" "01_$file"; done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.