ভর নামকরণ, * নিক্স সংস্করণ


11

আমি একই ধরণের নামধারী ফাইলগুলির একটি বিশাল নামকরণের জন্য একটি উপায় খুঁজছিলাম, অনেকটা এর মতো (একটি উইন্ডোজ সম্পর্কিত প্রশ্ন) আমি * নিক্স (উবুন্টু এবং ফ্রিবিএসডি পৃথকভাবে) ব্যবহার করছি। শেল (ব্যাশ, সিএসএইচ, ইত্যাদি) ব্যবহার করার সময় কেবল সংক্ষেপে, আমি কীভাবে বেশ কয়েকটি ফাইলকে পুনরায় নামকরণ করব যেমন উদাহরণস্বরূপ, নিম্নলিখিত ফাইলগুলি:

বিথোভেন - ফুর এলিজ.এমপি 3
বিথোভেন - মুনলাইট সোনাটা.এমপি 3
বিথোভেন - ওড টু জয়.এমপি 3
বিথোভেন - রোস্ট ওভার লোস্ট পেনি.এমপি 3

এই মত নামকরণ করা হবে?

হারিয়ে যাওয়া পেনি.এমপি 3 ওপরে জয়.এমপি 3 রেগে ফুর এলিজ.এমপি 3
মুনলাইট সোনাটা.এমপি 3

আমি এটি করতে চাইার কারণ হ'ল এই ফাইলগুলির সংগ্রহটি "বিথোভেন" নামে একটি ডিরেক্টরিতে চলে যাবে (অর্থাত্ ফাইল-নামগুলির উপসর্গ) এবং ফাইলের নামটিতে এই তথ্য থাকা অপ্রয়োজনীয় হবে।

উত্তর:


12

নতুন নামকরণের ইউটিলিটি আপনার যা ইচ্ছা তা করবে।

শুধু ব্যবহার rename 's/Beethoven\ -\ //g' *.mp3


ইউটিলিটির কোনও লিঙ্ক সরবরাহ করতে আপনি দয়া করে সম্পাদনা করতে পারেন, বা উল্লিখিত উভয় বিতরণেই এটি আদর্শ (উবুন্টু এবং ফ্রিবিএসডি)?
ক্রিস ডাব্লিউ। রিয়া

1
এটা পার্ল সঙ্গে আসে। দেবিয়ান এটিকে পুনর্নবীকরণ কমান্ড হিসাবে ব্যবহার করে, তাই আমার সন্দেহ হয় উবুন্টুও এটি করেন। আর একটি 'পুনর্নবীকরণ' কমান্ড রয়েছে যা মূল্যহীন, সুতরাং ম্যান পৃষ্ঠাটি পরীক্ষা করুন।
ডার্বোবার্ট

বাহ, পুনর্নাম সিনট্যাক্সটি ভিম প্রতিস্থাপনের জন্য খুব একই রকম দেখায়: ডি
ডিজং নগুইন

, / usr / পোর্ট / sysutils / পুনঃনামকরণ মধ্যে বন্দর FreeBSD 'র মধ্যে পুরোপুরি কাজ
জোশ ডব্লিউ

10

লিনাক্স / ইউনিক্সের সাথে অনেক কিছুর মতো, এটি করার একাধিক উপায় আছে!

কিছু এমএমভি (ভর এমভি ) ব্যবহার করতে পারে ।

কিছু পার্ল প্যাকেজ (নতুন উবুন্টু এবং ডেবিয়ান) এর সাথে পুনর্নবীকরণ, বা প্রিনাম কমান্ডটি এটি করতে পারে।

prename 's/Beethoven\ -\ //g' Beethoven*.mp3

মনে রাখবেন যে ফেডোরা 10-এ পুনর্নামকরণ সরঞ্জামটি একই প্রোগ্রাম নয় এবং ভিন্নভাবে কাজ করে। এটি একটি পৃথক প্যাকেজের অংশ, ইউজার-লিনাক্স-এনজি এবং এটি এখানে পাওয়া যাবে

আমি প্রায়শই অভ্যাসের বাইরে লুপ নেওয়ার জন্য খোলের কাছে যাই (সমস্ত ধরণের সরঞ্জাম সর্বদা উপস্থিত না হওয়ার পরে)।

mkdir -p Beethoven
for x in Beethoven\ -\ *
do
mv "$x" Beethoven/"${x/Beethoven - /}"
done

এটি বিথোভেন ডিরেক্টরি তৈরি করবে, তারপরে ফাইলটিকে সেই ডিরেক্টরি / ফাইলের নামাতে সরানো হবে, যেখানে ফাইলের নামটিতে "বিথোভেন -" কিছুই নেই।

পরীক্ষা হিসাবে, আগে:

$ ls
Beethoven - Fur Elise.mp3                 Beethoven - Ode to Joy.mp3
Beethoven - Moonlight Sonata.mp3          Beethoven - Rage Over the Lost Penny.mp3

পরে:

$ ls Beethoven/
Fur Elise.mp3                 Ode to Joy.mp3
Moonlight Sonata.mp3          Rage Over the Lost Penny.mp3

4

গ্রেপ এবং নামটির সংমিশ্রণটি ব্যবহার করে এই সমাধানটি ব্যবহার করে দেখুন। এটি ধরে নিয়েছে যে আপনার কাছে পুনরায় নামকরণের প্রয়োজন এমন একটি সম্পূর্ণ গুচ্ছ ডিরেক্টরি রয়েছে। যদি কয়েকটি মাত্র থাকে তবে আমি প্রত্যেকটির জন্য হার্ডকোডযুক্ত "শিল্পী -" প্যাটার্নটি সহ ম্যানুয়াল পদ্ধতির সাথে যেতে চাই।

# Rename any mp3 files in the directory hierarchy of type "a - b.mp3" to "b.mp3"
find . -name "*.mp3" -exec rename -n -v 's|^(.*/).*-\s*(.*)\s*$|$1$2|g' {} \;

এর ব্যাখ্যা খুঁজে : খোঁজ আদেশের সঙ্গে সব ফাইল খুঁজে বের করে .mp3 বর্তমান ফাইলটি শ্রেণীবিন্যাসে এক্সটেনশন, এবং যুক্তি প্রেরণ আহ্বান -exec প্রত্যেকের জন্য। লক্ষ্য করুন মধ্যে -exec , {} যুক্তি দ্বারা গৃহীত বোঝায় খোঁজ (ফাইল পাথ + + নাম)। নিশ্চিত প্রেরণ পরার নামান্তর এবং এর পরিবর্তে শেষে ইঙ্গিত খোঁজ কমান্ড।
\;;

উপরে প্রদত্ত কমান্ডটিতে -n (কোনও ক্রিয়া নেই) রয়েছে; অতএব এটি কেবল আপনাকে জানায় আপনি এটি চালিয়ে গেলে কি হবে। আমি আপনাকে প্রস্তাব দিচ্ছি যে আপনি এই কমান্ডটি -n সুইচ ব্যতীত চালাবেন কেবলমাত্র আপনি একবার চালানোর পরে এবং প্রস্তাবিত ফলাফলগুলিতে সন্তুষ্ট হন।

এখন regexp জন্য।

  • ^ স্ট্রিং শুরু ম্যাচ।
  • $ স্ট্রিংয়ের শেষের সাথে মেলে।
  • . যে কোনও চরিত্রের সাথে মেলে।
  • *পূর্ববর্তী নির্মাণের শূন্য বা তার বেশি অর্থ। উদাহরণস্বরূপ .*শূন্য বা আরও বেশি অক্ষর।
  • \s যে কোনও স্থানের অক্ষর বোঝায় for
  • \S যে কোনও স্থান ছাড়াই অক্ষর।
  • যেকোনো কিছু মধ্যে ()বন্দী পরার এবং প্রতিফলিত হয় $1, $2, তার অবস্থান উপর নির্ভর করে।

দ্য রিজেক্সপ:

  • শুরুতে alচ্ছিক ডিরেক্টরি কাঠামোটির সন্ধান করে, এটি $ 1 এ ক্যাপচার করে: (.*/)
  • " -" পর্যন্ত সমস্ত কিছু এড়িয়ে যান :.*-
  • শীর্ষস্থানীয় এবং পিছনের স্থানগুলি ব্যতীত $ 2: এ বাদ দিয়ে বাকী স্ট্রিং ক্যাপচার করে: (.*)
  • ফাইলটিকে $ 1 $ 2 হিসাবে পুনরায় লিখুন, যা "/path/to/file/""filename.mp3" হওয়া উচিত

আমার পরীক্ষাটি এখানে চলছে:

/tmp/test$ ls -R
.:
a  b  c  z-unknown.mp3

./a:
a3.mp3                 a - longer title3.mp3  c.mp3   disc2
a - longer title2.mp3  a - long title.mp3     disc 1  the band - the title.mp3

./a/disc 1:
a - title1.mp3  a - title2.mp3

./a/disc2:
a - title1.mp3  a - title2.mp3

./b:
cd - ab - title3.mp3  cd - title1.mp3  cd - title2.mp3  c.mp3

./c:
c-pony2.mp4  c - pony3.mp3  c - pony4.mp3  c-pony.mp3

/tmp/test$ find . -name "*.mp3" -exec rename -v 's|^(.*/).*-\s*(.*)\s*$|$1$2|g' {} \;
./c/c-pony.mp3 renamed as ./c/pony.mp3
./c/c - pony4.mp3 renamed as ./c/pony4.mp3
./c/c - pony3.mp3 renamed as ./c/pony3.mp3
./z-unknown.mp3 renamed as ./unknown.mp3
./a/the band - the title.mp3 renamed as ./a/the title.mp3
./a/a - longer title2.mp3 renamed as ./a/longer title2.mp3
./a/a - longer title3.mp3 renamed as ./a/longer title3.mp3
./a/disc 1/a - title1.mp3 renamed as ./a/disc 1/title1.mp3
./a/disc 1/a - title2.mp3 renamed as ./a/disc 1/title2.mp3
./a/a - long title.mp3 renamed as ./a/long title.mp3
./a/disc2/a - title1.mp3 renamed as ./a/disc2/title1.mp3
./a/disc2/a - title2.mp3 renamed as ./a/disc2/title2.mp3
./b/cd - title1.mp3 renamed as ./b/title1.mp3
./b/cd - title2.mp3 renamed as ./b/title2.mp3
./b/cd - ab - title3.mp3 renamed as ./b/title3.mp3

/tmp/test$ ls -R
.:
a  b  c  unknown.mp3

./a:
a3.mp3  c.mp3  disc 1  disc2  longer title2.mp3  longer title3.mp3  long title.mp3  the title.mp3

./a/disc 1:
title1.mp3  title2.mp3

./a/disc2:
title1.mp3  title2.mp3

./b:
c.mp3  title1.mp3  title2.mp3  title3.mp3

./c:
c-pony2.mp4  pony3.mp3  pony4.mp3  pony.mp3

রেজিএক্সপ্সের কৃপণ ব্যবসা, এবং আমি এগুলি লিখে অনেক ভুল করেছি, তাই আমি এই যোগ্যতার অভাবে কোনও ইনপুটকে স্বাগত জানাব। আমি জানি আমি এটি বেশ কয়েকটি পরীক্ষা করে দেখেছি।


1

আমি একটি কমান্ড-লাইন জাভা প্রোগ্রাম একসাথে রেখেছি যা ফাইলগুলির (এবং ডিরেক্টরিগুলি) নাম পরিবর্তন করে বাতাস তৈরি করে, বিশেষত স্ক্রিপ্টিংয়ের জন্য। এটি নিখরচায় এবং মুক্ত উত্স, যাতে আপনি এটি আপনার হৃদয়ের সামগ্রীতে পরিবর্তন করতে পারেন:

পুনরায় নামকরণ করুন
http://renamewand.sourceforge.net/

কিছু প্রাসঙ্গিক ব্যবহারের উদাহরণ:

ফর্মের ফাইলগুলি "<a> - <b>"তাদের নিজ নিজ ডিরেক্টরিতে সরান "<a>":

java -jar RenameWand.jar  "<a> - <b>"  "<a>/<b>"

সর্বশেষ-সংশোধিত সময় অনুসারে ফাইলগুলি বাছাই করুন এবং তাদের 3-সংখ্যার নাম দিয়ে নাম পরিবর্তন করুন:

java -jar RenameWand.jar  "<a>"  "<3|#FT> <a>"

ফাইলের নামের অংশগুলি পুনরায় সাজানো এবং কেস পরিবর্তন করুন:

java -jar RenameWand.jar  "<album> - <artist> - <song>.<ext>" 
                          "<artist.upper> <album.title> - <song>.<ext.lower>"

1

zmv Zsh নামকরণ সরঞ্জামটি খুব ভাল good

# zmv "programmable rename"
# Replace spaces in filenames with a underline
zmv '* *' '$f:gs/ /_'
# Change the suffix from *.sh to *.pl
zmv -W '*.sh' '*.pl'
# lowercase/uppercase all files/directories
$ zmv '(*)' '${(L)1}' # lowercase
$ zmv '(*)' '${(U)1}' # uppercase

আরও নোট এখানে ...


0

পেঙ্গুইন হেডগুলির জন্য এটি শেল স্ক্রিপ্ট বা এডাব্লু কে স্ক্রিপ্টে সহজেই করা যায়। আমাদের পক্ষে নিখুঁতভাবে আপনি মিডনাইট কমান্ডার চেষ্টা করতে পারেন। এটি বেশিরভাগ লিনাক্স বিতরণে শেল প্রম্পট টাইপ এমসি -a থেকে থাকে। আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করে ফাইলের নাম পরিবর্তন করতে পারেন। আমি নিবন্ধটি আমার সহায়তার জন্য http://www.thegeekstuff.com/2009/06/how-to-rename-files-in-group/ এ ব্যবহার করেছি।


0

এখানে একটি সাধারণ কমান্ড-লাইনের উদাহরণ রয়েছে। আমার কাছে একগুচ্ছ পিএনজি ফাইলের নামের মাঝে "সাদা" শব্দটি ছিল। আমি এটি বের করে কেবল একটি একক আন্ডারস্কোর ছেড়ে যেতে চেয়েছিলাম। এটি কৌশলটি করেছে:

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

0

পুনরায় নামকরণের প্যাটার্ন প্রয়োগ করতে ভিডির ব্যবহার করুন এবং তারপরে আপনার সম্পাদক বৈশিষ্ট্যগুলি ব্যবহার করুন।

NAME এর

vidir - সম্পাদনা ডিরেক্টরি

সংক্ষিপ্তসার

vidir [--verbose] [ডিরেক্টরি | ফাইল | -] ...

বর্ণনা

vidir একটি পাঠ্য সম্পাদকের ডিরেক্টরিতে সামগ্রীর সম্পাদনার অনুমতি দেয়। যদি কোনও ডিরেক্টরি নির্দিষ্ট না করা থাকে তবে বর্তমান ডিরেক্টরিটি সম্পাদিত হবে।

ডিরেক্টরি সম্পাদনা করার সময় ডিরেক্টরিতে প্রতিটি আইটেম তার নিজস্ব নম্বরযুক্ত লাইনে উপস্থিত হবে। এই সংখ্যাগুলি কীভাবে বিদির কী কী আইটেম পরিবর্তিত হয় তা ট্র্যাক করে। ডিরেক্টরি থেকে ফাইলগুলি সরাতে লাইনগুলি মুছুন বা ফাইলের নাম পরিবর্তন করতে ফাইলের নাম সম্পাদনা করুন। আপনি ফাইলের নাম অদলবদল করতে সংখ্যার জোড়াও স্যুইচ করতে পারেন।

মনে রাখবেন যে "-" সম্পাদনা করার জন্য ডিরেক্টরি হিসাবে নির্দিষ্ট করা থাকলে, এটি স্টিডিনের ফাইলনামগুলির একটি তালিকা পড়ে এবং সম্পাদনার জন্য প্রদর্শন করে। বিকল্পভাবে, ফাইলগুলির একটি তালিকা কমান্ড লাইনে নির্দিষ্ট করা যেতে পারে।

উদাহরণ

vidir vidir * .jpeg সাধারণ ব্যবহার।

খুঁজে | vidir - সাবডিরেক্টরি সামগ্রীগুলিও সম্পাদনা করুন। সাব-ডাইরেক্টরিগুলি মুছতে, তাদের সমস্ত বিষয়বস্তু এবং সম্পাদকের নিজস্ব উপ-ডিরেক্টরিটি মুছুন।

ফাইন্ড-টাইপ চ | vidir - বর্তমান ডিরেক্টরি এবং সাব ডিরেক্টরি ডিরেক্টরিতে সমস্ত ফাইল সম্পাদনা করুন।

লেখক

জোয়ে হেস 2006-2010

ম্যাগনাস ওল্ডরিচ ২০১১ দ্বারা পরিবর্তনসমূহ

কপিরাইট

কপিরাইট 2006-2011 উপরে উল্লিখিত হিসাবে ভিডির "লেখক" গুলি।

জিএনইউ জিপিএল এর আওতায় লাইসেন্সপ্রাপ্ত।


0

পার্ল ছাড়া একটি * নিক্সে renameউপলব্ধ

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

বিল্টইনস এবং সেড ব্যবহার করে আমরা এটি করতে দ্রুত শেল স্ক্রিপ্টটি চাবুক মারতে পারি যা পার্ল নামকরণ স্ক্রিপ্টের সাথে আমাদের খুব অনুরূপ সিনট্যাক্স দেয়, কিছুটা দক্ষতা হ্যান্ডলিংয়ের অভাব থাকলেও এটি কাজটি সম্পন্ন করে।

sedrename() {
  if [ $# -gt 1 ]; then
    sed_pattern=$1
    shift
    for file in $(ls $@); do
      mv -v "$file" "$(sed $sed_pattern <<< $file)"
    done
  else
    echo "usage: $0 sed_pattern files..."
  fi
}

ব্যবহার

sedrename 's/Beethoven\ -\ //g' *.mp3

before:

./Beethoven - Fur Elise.mp3
./Beethoven - Moonlight Sonata.mp3
./Beethoven - Ode to Joy.mp3
./Beethoven - Rage Over the Lost Penny.mp3

after:

./Fur Elise.mp3
./Moonlight Sonata.mp3
./Ode to Joy.mp3
./Rage Over the Lost Penny.mp3

বলুন আমরা লক্ষ্যযুক্ত ফোল্ডারগুলিও তৈরি করতে চেয়েছিলাম ...

যেহেতু mvআমরা sedrenameএখানে ফোল্ডার তৈরি করতে পারছি না তেমনি এটি এখানে রয়েছে তবে এটি মোটামুটি ছোট একটি পরিবর্তন, তাই আমি এটিকেও অন্তর্ভুক্ত করাতে ভাল লাগবে।

আমাদের একটি ইউটিলিটি ফাংশন abspath(বা নিখুঁত পাথ) প্রয়োজন যাতে আমরা সেড / নাম পরিবর্তনের প্যাটার্নের জন্য লক্ষ্য ফোল্ডার (গুলি) তৈরি করতে পারি যার মধ্যে নতুন ফোল্ডার কাঠামো অন্তর্ভুক্ত থাকে।

abspath () { case "$1" in
               /*)printf "%s\n" "$1";;
               *)printf "%s\n" "$PWD/$1";;
             esac; }

এটি নিশ্চিত করবে যে আমরা আমাদের লক্ষ্যযুক্ত ফোল্ডারগুলির নাম জানি। আমরা যখন নাম পরিবর্তন করি তখন আমাদের লক্ষ্য ফাইলের নামে এটি ব্যবহার করতে হবে।

# generate the rename target
target="$(sed $sed_pattern <<< $file)"

# Use absolute path of the rename target to make target folder structure
mkdir -p "$(dirname $(abspath $target))"

# finally move the file to the target name/folders
mv -v "$file" "$target"

এখানে পুরো ফোল্ডার সচেতন স্ক্রিপ্ট ...

sedrename() {
  if [ $# -gt 1 ]; then
    sed_pattern=$1
    shift
    for file in $(ls $@); do
      target="$(sed $sed_pattern <<< $file)"
      mkdir -p "$(dirname $(abspath $target))"
      mv -v "$file" "$target"
    done
  else
    echo "usage: $0 sed_pattern files..."
  fi
}

অবশ্যই, এটি এখনও কার্যকর হয় যখন আমাদের নির্দিষ্ট টার্গেট ফোল্ডার না থাকে।

যদি আমরা সমস্ত গান একটি ফোল্ডারে রাখতে চাই, ./Beethoven/আমরা এটি করতে পারি:

ব্যবহার

sedrename 's|Beethoven - |Beethoven/|g' *.mp3

before:

./Beethoven - Fur Elise.mp3
./Beethoven - Moonlight Sonata.mp3
./Beethoven - Ode to Joy.mp3
./Beethoven - Rage Over the Lost Penny.mp3

after:

./Beethoven/Fur Elise.mp3
./Beethoven/Moonlight Sonata.mp3
./Beethoven/Ode to Joy.mp3
./Beethoven/Rage Over the Lost Penny.mp3

বোনাস বৃত্তাকার ...

ফোল্ডার থেকে একক ফোল্ডারে ফাইল স্থানান্তর করতে এই স্ক্রিপ্টটি ব্যবহার করে:

ধরে নিই আমরা মিলে যাওয়া সমস্ত ফাইল সংগ্রহ করতে চেয়েছিলাম এবং সেগুলি বর্তমান ফোল্ডারে রেখে দিতে পারি, আমরা এটি করতে পারি:

sedrename 's|.*/||' **/*.mp3

before:

./Beethoven/Fur Elise.mp3
./Beethoven/Moonlight Sonata.mp3
./Beethoven/Ode to Joy.mp3
./Beethoven/Rage Over the Lost Penny.mp3

after:

./Beethoven/ # (now empty)
./Fur Elise.mp3
./Moonlight Sonata.mp3
./Ode to Joy.mp3
./Rage Over the Lost Penny.mp3

সেড রেজেক্স নিদর্শনগুলিতে নোট

নিয়মিত শেড প্যাটার্ন বিধিগুলি এই স্ক্রিপ্টে প্রয়োগ হয়, এই নিদর্শনগুলি পিসিআরই নয় (পার্ল সামঞ্জস্যপূর্ণ নিয়মিত এক্সপ্রেশন)। আপনি আপনার প্ল্যাটফর্মের উপর নির্ভর করে sed -rবা নিয়মিত অভিব্যক্তি সিনট্যাক্সকে বাড়িয়ে দিতে পারেন sed -E

man re_formatসেড বেসিক এবং এক্সটেন্ডেড রেজএক্সপেক্স নিদর্শনগুলির সম্পূর্ণ বিবরণের জন্য পসিক্স অনুগত দেখুন ।

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