এক লাইনের কমান্ড দিয়ে ফাইলগুলির নাম পরিবর্তন করুন ame


10

আমার এই ডিরেক্টরিটি আছে এবং ফাইলগুলির নাম পরিবর্তন করতে চাই:

===> ls -1 Der-vierte-Weise/
10 - 10 - Erkenntniss.ogg
1 - 01 - Hoffnung.ogg
11 - 11 - Wahrheit.ogg
12 - 12 - Dankbarkeit.ogg
13 - 13 - Kredits.ogg
2 - 02 - Familie.ogg
3 - 03 - Demut.ogg
4 - 04 - Freude.ogg
5 - 05 - Schoenheit.ogg
6 - 06 - Solidaritaet.ogg
7 - 07 - Entscheidung.ogg
8 - 08 - Hilfe.ogg
9 - 09 - Unterstuetzung.ogg

ফলাফলটি দেখতে এমন হওয়া উচিত:

===> ls -1 Der-vierte-Weise/
01 - Hoffnung.ogg
02 - Familie.ogg
...

আমি সাধারণ শেল সরঞ্জামগুলির সাহায্যে এটি সমাধান করতে চাই।


1
আমি সাধারণ শেল সরঞ্জামগুলির সাহায্যে এটি সমাধান করতে চাই। আমি বলছি না যে আপনার কোনও ভাল কারণ নেই, তবে আমি বিশ্বাস করি আপনি নিজের কাছে একটি প্রশ্ন জিজ্ঞাসা করেছেন এবং উত্তর দিয়েছেন "কেন?"। গতবার সমাধানের জন্য আমার খুব অনুরূপ সমস্যা হয়েছিল আমি সঙ্গে সঙ্গে বাশকে একদিকে সরিয়ে নিয়ে পাইথনে সমাধান করেছি। এত সহজ (তবে আমি পাইথন, স্ট্রিং পদ্ধতি, গ্লোব.glob এবং os.rename ইতিমধ্যে জানতাম - এবং আমাকে ফাঁকা স্থান এবং অন্যান্য বিশ্রী অক্ষর সহ ফোল্ডারনেমে পূর্ণ একটি গাছও পুনরুক্ত করতে হয়েছিল, যার কোনটিই অতিরিক্ত কারণের কারণ নয় পাইথন ব্যবহার করে বিরক্ত করুন)
নিগেল 222

1
@ নিগেল 222 আমি অলস এবং আমি যতটা সম্ভব কম অক্ষর টাইপ করতে চাই। এজন্য আমি এখানে পাইথন ব্যবহার করতে চাই না। আমাকে ভুল করবেন না এখন অবধি পাইথন হ'ল আমার পছন্দের প্রোগ্রামিং ভাষা এবং এটি প্রতিদিন ব্যবহার করুন।
guettli

উত্তর:


18

আপনি ব্যবহার করতে পারেন rename...

rename -n 's/^[0-9]+ - //' *

-nফাইলগুলির প্রকৃত নাম পরিবর্তন করতে পরীক্ষার পরে সরান

ব্যাখ্যা

  • s/old/new/oldসঙ্গে প্রতিস্থাপনnew
  • ^ স্ট্রিং শুরু
  • [0-9]+ কিছু সংখ্যা

কি ধরণের রেগেক্স ফুলটি renameসরঞ্জাম দ্বারা সমর্থিত । এটি পিসিআরই ব্যবহার করে? ... মহান হতে হবে.
guettli

5
@ গুয়েতলি কড়া কথা বলছেন, এটি পিসিআরই নয় (এটি পার্ল সামঞ্জস্যপূর্ণ নিয়মিত অভিব্যক্তি)। renameএকটি পার্ল স্ক্রিপ্ট তাই এটি সম্পূর্ণ পার্ল রেগুলার এক্সপ্রেশন সমর্থন আছে নেই; পিসিআরই হ'ল এটির একটি উপসেট। তবে, আপনি পিসিআরই থেকে যা কিছু জানেন তা প্রযোজ্য হবে rename
টেরডন

@ স্টারডন আমি বাস্তবায়নের জন্য পাত্তা দিচ্ছি না। আপনি যদি এটি গণিত-চশমা দিয়ে দেখেন তবে তারপরে renameপার্ল সুসংগত নিয়মিত এক্সপ্রেশন রয়েছে। হ্যাঁ, পিসিআর বাস্তবায়ন ব্যবহার হয় না। আমি এটি বুঝতে পেরেছি :-) আপনার দ্রুত উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ।
গেটলি

9

bash শুরু থেকে প্রয়োজনীয় অংশটি ছড়িয়ে দিতে প্যারামিটারের সম্প্রসারণ:

for f in *[[:blank:]]*.ogg; do echo mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done

প্রসারিত ফর্ম:

for f in *[[:blank:]]*.ogg; do 
    echo mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"
done

echoশুকনো চলমান জন্য হয়; প্রকৃত কর্মের জন্য এ থেকে মুক্তি পান:

for f in *[[:blank:]]*.ogg; do mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done

উদাহরণ:

% ls -1
1 - 01 - Hoffnung.ogg
2 - 02 - Familie.ogg

% for f in *[[:blank:]]*.ogg; do mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done 

% ls -1                                                                             
01 - Hoffnung.ogg
02 - Familie.ogg

হ্যাঁ, কাজ করে। ধন্যবাদ. যেহেতু আমি পাইথন থেকে পার্ল সামঞ্জস্যপূর্ণ নিয়মিত প্রকাশ জানি (যা আমি প্রতিদিন ব্যবহার করি), তাই আমি renameআদেশটি পছন্দ করি । (কম টাইপিংয়ের প্রয়োজন)।
গেটলি

1
@guettli renameযেতে যদি আপনি PCRE সাথে পরিচিত উপায়; renameউত্তর ইতিমধ্যে দেওয়া হয়েছিল বিশুদ্ধ সঙ্গে সরানো আছে bash। কেবল লক্ষণীয়, pythonএর re(বা regex) মডিউলটি পুরোপুরি পিসিআরই সামঞ্জস্যপূর্ণ বিটিডাব্লু নয়।
হিমেইল

@ গুয়েটলি এছাড়াও আপনি কি আমার উত্তরটিকে সরিয়ে দিয়েছেন? : ও
হেইমাইল

হ্যাঁ আমি করেছি, এবং আমি আপনার মন্তব্যে অগ্রাহ্য করেছি। আমি আশা করি আপনি এটি ব্যক্তিগতভাবে গ্রহণ করবেন না। আমাকে ভুল করবেন না, তবে আমার ব্যক্তিগত মতামতটি ${f#[[:digit:]]*-[[:blank:]]}এটি কুরুচিপূর্ণ। হ্যাঁ এটা কাজ করে. তবে আমরা একবিংশ শতাব্দীতে থাকি। আমি মনে করি এটি "এটি কাজ করে" থেকে "এটি সহজ এবং মজাদার" এ স্যুইচ করার সময় এসেছে। যদি "এটি কাজ করে" লক্ষ্য হয়, তবে লিনাক্স কখনও ব্যবহারকারী বান্ধব না হওয়ার কুসংস্কারটি কখনই ছাড়বে না। যেহেতু আপনি ইতিমধ্যে প্রচুর ভোট পেয়েছেন, তাই এই একটি ডাউন-ভোটের ক্ষতি হওয়া উচিত নয় (আমি আশা করি)। যদি তা হয় তবে আমাকে বলুন এবং আমি এটি আবার নেব।
guettli

1
পছন্দ করুন এখানে: gnu.org/software/bash/manual/html_node/… কেবল লক্ষ করুন, চরিত্র শ্রেণিটি ছিল [[:digit:]]এবং [[:blank:]]আপনার সাথে মেনে চলার জন্য ছিল locale, এগুলি রেগেক্সেও খুব সাধারণ।
হিমেইল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.