বছরকে শুরু থেকে শুরু পর্যন্ত স্থান পরিবর্তন করার জন্য মাসের নামকরণের ডিরেক্টরি


11

আমি বর্তমানে কয়েকটি সংগীত ফোল্ডার নিয়ে লড়াই করছি। আমি একবার প্যাটার্ন নিম্নলিখিত এগুলির নাম দেখতে সিদ্ধান্ত নিয়েছে: artist - album - year। আমি আজ বুঝতে পেরেছি যে এটি কোনও চালাক পদক্ষেপ নয় এবং এখন আমার ডিরেক্টরিগুলি নিদর্শন অনুসরণ করে নামকরণ করতে চাই: year - artist - albumতারা তালিকাভুক্ত হওয়ার পরে তারা আরোহী ক্রমে প্রদর্শিত হবে।

আমি হাত দিয়ে নামকরণ শুরু করেছিলাম তবে প্রায় 700 ফোল্ডার সহ একটি সহজ উপায় থাকতে হবে; আমি ব্যবহার করার চেষ্টা করেছি gprenameকিন্তু আমি রেজেেক্স এবং বাশ স্ক্রিপ্টিং এ তেমন ভাল নই ...

এমন কেউ আছেন যে আমাকে আমার দুর্বল আঙ্গুলগুলি রক্ষা করতে সহায়তা করতে পারেন?

কিছু উদাহরণ:

Aes Dana - Memory Shell - 2004 
Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009

হবে

2004 - Aes Dana - Memory Shell
2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)

সম্পাদনা: কিছু শিল্পী এবং অ্যালবামের নামের মতো And.Idবা বিশেষ চরিত্র থাকে Kool & The Gang। যদিও প্রতিটি ডিরেক্টরি পৃথক -হিসাবে আছে ।


2
অনুগ্রহ করে কিছু উদাহরণ ডিরেক্টরি নাম এবং প্রত্যাশিত আউটপুট যুক্ত করুন।
মারু

উদাহরণস্বরূপ: আমার কাছে "এস দানা - মেমরি শেল - 2004" আছে এবং আমি "2004 - এস দানা - মেমরি শেল"
তাজমহেম

1
আপনি কীভাবে প্রশ্নটি সম্পাদনা করবেন জানেন, তাই আপনি কেন এটি প্রশ্নটিতে যুক্ত করবেন না? এছাড়াও, কোনও অ্যালবাম বা শিল্পীর নাম রয়েছে কি -?
মারু

নামটি কি "-" সংজ্ঞা অনুসারে ডিলিমিটার দ্বারা সাজানো হয়েছে এবং এটি সম্ভবত নামে অন্য কোথাও ঘটে?
জ্যাকব ভিলিজ

আমি উত্স ফোল্ডারগুলিকে কোনও পাঠ্য ফাইলে পুনর্নির্দেশের প্রবণতা দেখায়, তারপরে ভিএম ব্যবহার করুন। সঠিক ক্রমে উত্স ফোল্ডারের প্রাসঙ্গিক উপাদানগুলির সাথে প্রতিটি লাইনের জন্য একটি দ্বিতীয় প্যারামিটার তৈরি করতে আমি একটি ম্যাক্রো তৈরি করি, তারপরে প্রতিটি লাইনের শুরুতে এমভি লাগাতে অন্য ম্যাক্রো ব্যবহার করি। আমি এমনকি হারিয়ে যাওয়া ফোল্ডারগুলিতে গোলমাল করার ক্ষেত্রে প্রথমে ফোল্ডারের কাঠামোর একটি অনুলিপি নেওয়া পর্যন্ত যেতে পারি।

উত্তর:


16

ধরে নেওয়া যাক আপনি Perl এক্সেস আছে rename- (উবুন্টুতে সাধারণভাবে উপলভ্য পার্থক্য সে বিষয়ে পরিষ্কারভাবে বর্ণনা জন্য @Serg ধন্যবাদ সন্দেহ নেই, কলে করে। /usr/bin/rename, আপনি ব্যবহার করতে পারে এবং আপনি সঠিক এক পাওয়া উচিত):

rename -n 's/(.*) - (\d{4})\//$2 - $1/' */

-nপ্রকৃতপক্ষে ডিরেক্টরিগুলির নতুন নামকরণের জন্য পরীক্ষার পরে সরান । এটি 1000 এবং 9999 এর মধ্যে সমস্ত অ্যালবামের তারিখ ধরে নিয়েছে Pro সম্ভবত যুক্তিসঙ্গত ...

ব্যাখ্যা

  • s/old/newoldসঙ্গে প্রতিস্থাপনnew
  • (.*)$1পরবর্তী হিসাবে রেফারেন্সে যে কোনও অক্ষরের যে কোনও সংখ্যা সংরক্ষণ করুন
  • (\d{4})\/$2পরবর্তী হিসাবে রেফারেন্সের জন্য লাইনের শেষে চারটি সংখ্যা সংরক্ষণ করুন ।
  • */ সমস্ত ডিরেক্টরি মেলে (ফাইল নয় - সহায়তার জন্য @ মুরুকে ধন্যবাদ!)

3
হতে */পারে শুধুমাত্র ডিরেক্টরি মেলে।
মারু

@ মুরু মনে হচ্ছে এটি কাজ করে না! আমি কি বোকামি করছি?
জান্না

1
@ জান্না আই পাতলা তারা যা উল্লেখ করে তা হ'ল কিছু শেল যেমন mkshবিল্ট-ইন বলে rename। পুরো পথ দিয়ে এটি প্রতিস্থাপন করা বা prenameপার্ল
নামটি

1
@ জান্না এই আকর্ষণীয় বিটটি খুঁজে পেয়েছেন: unix.stackexchange.com/a/229248/85039 টিএল; ডিআর : rename"কখনও কখনও বলা হয় না prename" তবে দৃশ্যত তারা একই স্ক্রিপ্টের দুটি "শাখা", এটি রক্ষণাবেক্ষণ করা হয় নি ডেবিয়ান এবং অন্যটি দ্বারা by তাই হ্যা . । । এটি পুরো গণ্ডগোল - কিছু শাঁসের নিজস্ব রয়েছে rename, পার্ল প্যাকেজটির নিজস্ব রয়েছে rename, এবং ডেবিয়ান নিজেই পৃথক প্যাকেজ সরবরাহ করে
সের্গি কলডায়াজিনি

1
@Zanna আমি কর্মসূচির চিন্তা ছিল হিসাবে উল্লেখ করা rename.ulমধ্যে unix.stackexchange.com/q/229230/21167
zwol

6

সরল পাইথন স্ক্রিপ্ট এ জাতীয় কাজ করতে পারে:

$ tree
.
├── Aes Dana - Memory Shell - 2004
├── Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
└── rename_dirs.py

2 directories, 1 file
$ ./rename_dirs.py */
$ tree
.
├── 2004 - Aes Dana  -  Memory Shell 
├── 2009 - Anja Schneider & GummiHz  -  Back To Back (Remixes Part 2) 
└── rename_dirs.py

স্ক্রিপ্ট সামগ্রী:

#!/usr/bin/env python
from shutil import move;
import sys

for i in sys.argv[1:] :
    parts = i[:-1].split('-')
    year = parts[-1].strip()
    new_name = year + " - " + " - ".join(parts[:-1]).strip()
    move(i,new_name)

এটি কীভাবে কাজ করে:

  • মূল কৌশলটি হ'ল আমরা একই ডিরেক্টরি থেকে স্ক্রিপ্ট কার্যকর করি যেখানে লক্ষ্যগুলি থাকে। আমরা */স্ক্রিপ্টের আর্গুমেন্ট হিসাবে কেবল ডিরেক্টরি সরবরাহ করতে পাস করি
  • স্ক্রিপ্টটি সমস্ত কমান্ড-লাইন আর্গুমেন্টগুলির উপরে পুনরাবৃত্তি করে, প্রতিটি ফাইলের নাম -অক্ষরের স্ট্রিংয়ের তালিকায় বিভক্ত করে । আমরা যে অংশগুলি বের করেছি সেগুলি থেকে নতুন ফাইল নাম তৈরি করা হয়।
  • move()shutilsমডিউল থেকে ফাংশন প্রকৃতপক্ষে ডিরেক্টরিগুলির নতুন নামকরণ করে

ব্যবহারটি নোট করুন: ./rename_dirs.py */

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.