ব্যাচের নামকরণের ফাইলগুলি


149

আমার ইমেজ পূর্ণ একটি ডিরেক্টরি আছে:

image0001.png
image0002.png
image0003.png
...

এবং আমি চাই যে ওয়ান-লাইনার তাদের নামটি বলুন (বলুন)।

0001.png
0002.png
0003.png
...

আমি এটা কিভাবে করবো?


8
এটি ইউনিক্সের শীর্ষস্থানীয় একটি কমান্ড লাইন FAQs এবং আমি ইতিমধ্যে এটি এই সাইটে খুঁজে পাচ্ছি না, সুতরাং আমাদের এই সম্প্রদায়টি উইকি করা উচিত?
গিলস

5
কেন দেখছি না। এটি যাচাইযোগ্য উত্তর সহ একটি নির্দিষ্ট প্রশ্ন।
ইন্টারনেট মানুষ

3
আপনি যদি এক্স চালাচ্ছেন তবে এটি thunar -B *.pngথুনারের বাল্ক-নাম পরিবর্তনের গুই সরঞ্জামের চেয়ে খুব সহজ নয় ।
dotjoe

@ ডটজো ধন্যবাদ, থুনার সত্যই আকর্ষণীয়।
ভোলকার সিগেল

উত্তর:


105

যদি আপনি বাশ বা অন্যান্য পসিক্স-সামঞ্জস্যপূর্ণ শেল ব্যবহার করছেন:

for f in *.png; do
    mv -- "$f" "${f#image}"
done

2
এটি মেন্ডেল কুপারস অ্যাডভান্সড বাশ-স্ক্রিপ্টিং গাইড tldp.org/LDP/abs/html
ডাব্লু_হ্যালি

2
@ ডাব্লু_ওয়্যালি আমি উউল্যাশ বাশ গাইডের পক্ষে, গাইডটি এড়াতে দৃ strongly়ভাবে পরামর্শ দিচ্ছি ।
ওয়াইল্ডকার্ড

@ উইল্ডকার্ড: এবিএস গাইড এড়ানোর পরামর্শ দেওয়ার জন্য আপনার কারণগুলি কী?
খ্রিস্টান সেভেরিন

@ ক্রিশ্চিয়েন্সসিভারিন খারাপ অভ্যাস এবং সরাসরি ভাঙা কোড প্রচার। আমার প্রোফাইল পৃষ্ঠায় লিঙ্কগুলি চেক করুন।
ওয়াইল্ডকার্ড

আপনি যদি বিভিন্ন ফাইলের নিদর্শনগুলির জন্য এই উদাহরণটি কীভাবে মানিয়ে নিতে জানেন না তবে আপনি উপরে বর্ণিত গাইডের প্যারামিটার সম্প্রসারণ বিভাগটি একবার দেখতে চান ।
lex82

108

ডেবিয়ান এবং ডেরিভেটিভগুলিতে, পার্ল এর মত renameকাজ করতে একইভাবে কাজ করে sed:

  rename -v 's/image//' *.png

পরিবর্তে যেগুলি এর renameথেকে util-linuxএটির মতো কাজ করে সেখানেও রয়েছে :

  rename image '' *.png

6
আপনার সত্যিই ব্যাখ্যা করা উচিত যে এটি একটি পার্ল প্রোগ্রামাম যা ইনস্টল করতে হতে পারে এবং এটি নিয়মিত অভিব্যক্তি হিসাবে যুক্তি হিসাবে গ্রহণ করে।

আহ, আমি এটা সম্পর্কে অবগত ছিল না। আমি ক্যানোনিকাল উত্তরটি ক্রেডিট দেব, যখন আমি এটি সনাক্ত করি :)
ইন্টারনেট মানুষ

5
এই renameপ্রোগ্রামটি পার্লের উদাহরণগুলির বিতরণ থেকে এসেছে। ডেবিয়ান এবং উবুন্টু এটি জাহাজ হিসাবে /usr/bin/rename। অন্যান্য ইউনিক্স রূপগুলি এটি সরবরাহ না করে বা সম্পূর্ণ আলাদা সরবরাহ করতে পারে /usr/bin/rename
গিলস

1
কিছু সংস্করণ renameএকটি নিতে থেকে থেকে প্রতিস্থাপন প্যাটার্ন:rename [options] <expression> <replacement> <file>...
melds

1
আপনি যদি কোনও ডেবিয়ান ভিত্তিক সিস্টেম ব্যবহার করে থাকেন তবে সুডো অ্যাপলিকেশন ইনস্টল করে পুনরায় নামকরণ করুন, তবে আপনি পুনর্নবীকরণ কমান্ডটি ব্যবহার করতে পারেন। এটি ফাইলের নামগুলির জন্য সেড।
ctrl-alt-delor

41

zmv

Zsh শেলের একটি শক্তিশালী ব্যাচের পুনরায় নাম কমান্ড রয়েছে zmv

প্রথমে আপনাকে zmvনিম্নলিখিত কমান্ডটি সক্ষম করতে হবে (এটি আপনার মধ্যে যেতে পারে ~/.zshrc)।

autoload zmv

বেসিক সিনট্যাক্সটি হ'ল zmv PATTERN REPLACEMENT। প্যাটার্নটি শেল গ্লোব এক্সপ্রেশন। প্যাটার্নের অংশগুলি বন্ধনী দ্বারা ঘিরে রাখা যেতে পারে। প্রতিস্থাপন পাঠ্য ধারণ করতে পারে $1, $2ইত্যাদি, প্যাটার্ন N তম parenthesised গ্রুপ পড়ুন। উদাহরণ স্বরূপ:

zmv 'image(*.png)' '$1'

এছাড়াও আপনি স্বয়ংক্রিয়ভাবে নির্ধারণ করতে zsh অনুরোধ করতে পারেন $1, $2ইত্যাদি প্যাটার্ন ওয়াইল্ডকার্ড অক্ষর মেলে:

zmv -w 'image*.png' '$1.png'

4
sweeeeeeeeeeeeeeeeeet। তবুও অন্য একটি কারণ আমার zsh শিখতে হবে।
ixtmixilix

1
@ixtmixilix কি শিখতে হবে? কেবল এটি ব্যবহার শুরু করুন এবং কিছু অতিরিক্ত চমকপ্রদতার জন্য সম্ভবত প্রিজটো ( github.com/sorin-ionescu/prezto ) যুক্ত করুন।
গেরি

সত্যিই শীতল, যেমন zmv এর মানুষের তীক্ষ্ন এই বিষয়ে আরও কাছে ওরফে mmv = 'noglob zmv -w' যোগ করে সরলীকৃত করা যেতে পারে:। Mmv * .c.orig orig / * গ
Bretsko

zmvপ্রেজ্টো সক্ষম করার জন্য নিম্নলিখিতটি # Set the Zsh functions to load (man zshcontrib).প্রদান করে আপনার pre / .zpreztorc- এ লাইনটিকে কিছুটা সঙ্কোচিত করা প্রয়োজনzstyle ':prezto:load' zfunction 'zargs' 'zmv'

33

আমি সাধারণত এই ইউজকেসটির জন্য দুর্দান্ত এবং সাধারণ এমএমভি ( ম্যান পেজ ) ইউটিলিটিটি ব্যবহার করি:

$ mmv "image*.png" "#1.png"

আপনার কাজ সম্পাদন করবে।

#1লক্ষ্য প্যাটার্ন যাই হোক না কেন উৎস প্যাটার্ন ওয়াইল্ডকার্ড সাথে মেলে দ্বারা প্রতিস্থাপিত করা হবে না। এটি বেশ কয়েকটি ওয়াইল্ডকার্ডের জন্যও কাজ করে এবং উদাহরণস্বরূপ ফাইলের নামের অংশগুলির ক্রম পরিবর্তন করতে এটি ব্যবহার করা যেতে পারে। আপনি নিম্নতর কেস কে আপার কেস লেটারে রূপান্তর করার মতো আরও জটিল জিনিস সহজেই করতে পারেন।

উদ্ধৃতি দিয়ে শেল থেকে নিদর্শনগুলি সুরক্ষা নিশ্চিত করুন।


এই ইউটিলিটিটি দেখানোর জন্য ধন্যবাদ। আমি এটি ডেবিয়ান, উবুন্টু এবং সাইগউইন সংগ্রহস্থলগুলিতে পেয়েছি। ম্যান পৃষ্ঠাটি নিয়ে আমার সমস্যা হয়েছিল তবে আমি কিছু ওয়েব পৃষ্ঠাগুলি এবং এই স্ট্যাক ওভারফ্লো প্রশ্ন পেয়েছি যা আপনি এটি কীভাবে ব্যবহার করছেন তা ব্যাখ্যা করতে সহায়তা করে। stackoverflow.com/questions/417916/how-to-do-a-mass-rename
W_Whalley

ধন্যবাদ, আমি এটি আরও পরিষ্কার করার জন্য উত্তরে আরও কিছু তথ্য যুক্ত করেছি।
মার্সেল স্টিমবার্গ

3
এটি যথেষ্ট উত্সাহ দিতে পারে না! এটি খুব সহজ এবং বন্ধুত্বপূর্ণ। হোমব্রুতে ওএস এক্সের জন্য উপলব্ধ।
গ্রেগ দুবিকি

9

লুপের জন্য পজিক্স শে

নাম বদলে সেড ব্যবহার করে

for i in image*jpg
do 
  mv -v "$i" "$(echo "$i" | sed -e 's/^\.\/image//' - )"
done

6

আমি পার্ল তাই পছন্দ করি:

perl -nlE '$old=$_; s/image//; qx(mv $old $_)'

আপনি অন্য কাজগুলিতে অন্য ডিরেক্টরিতে অনুলিপি করার মতো একই প্যাটার্নটি ব্যবহার করতে পারেন:

perl -nlE '$old=$_; s(image)(/path/to/new/dir/); qx(mv $old $_)'

2
বা (নিরাপদ!):rename($old,$_)

5

qmv

কমান্ড qmvথেকে renameutilsদুই colums, একটি ট্যাব দ্বারা পৃথক সঙ্গে ফাইলের নামের একটি তালিকা দেখানো একজন সম্পাদক প্রর্দশিত হবে। উভয় কলামে প্রতিটি সারি ফাইলের একটির নাম দেখায়। ডান কলামটি ফাইলগুলির নতুন নাম উপস্থাপন করছে।
পরিবর্তনগুলি করতে, ডানদিকে নামগুলি সম্পাদনা করুন। এই উদাহরণে, :%s/...বা ভিজ্যুয়াল ব্লক মোড সহায়ক।

আপনার সম্পাদকীয় ফাইল নাম

$ qmv *.png

সম্পাদক ইন:

image0001.png           image0001.png
image0002.png           image0002.png
image0003.png           image0003.png         
~                                             
~                                             
~                                             
~                                             
"/tmp/user/1000/qmvxWyVMs" 3L, 93C

ডান কলামে নামগুলি সম্পাদনা করুন:
( imageভিজ্যুয়াল ব্লক মোড ব্যবহার করে সমস্ত লাইন থেকে উপসর্গটি সরিয়ে দেওয়া হচ্ছে)

image0001.png           0001.png
image0002.png           0002.png
image0003.png           0003.png         
~                                             
~                                             
~                                             
~                                             
:wq

নামকরণের লগ:

image0001.png -> 0001.png
image0002.png -> 0002.png
image0003.png -> 0003.png

(যেমন উবুন্টু apt-get install renameutils:)


3

রিকার্সিভ

ইমেজ * পিএনজি ফাইল নির্বাচন করা সহজ পুনরাবৃত্তি, এবং ফাইলের নামগুলিতে নতুন লাইনের সাথে ডিল করার দরকার নেই

find . -name "image*.png" | while read f; do mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; done

নিরাপদ, ফাঁকা স্থান, নতুন লাইন, ব্যাকস্ল্যাশ এবং অন্য যে কোনও কিছুই মোকাবেলা করতে পারে :

find . -name "image*.png" | while IFS= read -r f; do 
   mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; 
done

1

পজিক্স শ কিছুক্ষণ লুপ ব্যবহার করে

findকমান্ড থেকে নাম পড়া ।

find . -maxdepth 1 -type f -name 'image*png' | while IFS= read -r f; do
  mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"
done

একটি ফাইল থেকে নাম পড়া

while IFS= read -r f; do mv -v "$f" "$(echo "$f"|sed -e 's/^\.\/image//' - )"; done < flist


1

জন্য উইন্ডোজ এবং লিনাক্স , এই পার্ল স্ক্রিপ্ট কি করতে হবে; এক্ষেত্রে:

$ rnm -l 's/^image//' '*.png'

স্ক্রিপ্টটি ডিরেক্টরিগুলির অধীনে পুনরাবৃত্তভাবে চলতে পারে এবং এমনকি তাদের সকলের জন্য একটি গণনা প্রেরণ করতে পারে:

$ rnm -r 's/^/$counter./' '/\.png$/'

ইউটিএফ -8 অক্ষরগুলি উইন্ডোজ এবং লিনাক্স উভয় ক্ষেত্রেই সঠিকভাবে চিকিত্সা করা হয়।



0

নিয়মিত অভিব্যক্তি (উইন্ডোজ, লিনাক্স এবং ওএস এক্স সমর্থন করে) এর মাধ্যমে ফাইল / ডিরেক্টরিগুলির নিরাপদে ব্যাচের নামকরণের জন্য ব্যবহারিক ক্রস-প্ল্যাটফর্ম কমান্ড-লাইন সরঞ্জাম ( https://github.com/shenwei356/brename ) ব্যবহার করে দেখুন।

@ পেট্রিকডুরুসউ বলেছেন:

লিনাক্সে বিভিন্ন ব্যাচের ফাইলের নামকরণের বিকল্প রয়েছে তবে আমি আমার কাছে বেনামে কোনও সংক্ষিপ্ত-কমিং দেখতে পাইনি।

বৈশিষ্ট্য:

  • ক্রস প্ল্যাটফর্ম । উইন্ডোজ, ম্যাক ওএস এক্স এবং লিনাক্স সমর্থন করে।
  • সেফ । দ্বারা সম্ভাব্য দ্বন্দ্ব এবং ত্রুটি পরীক্ষণ
  • ফাইল ফিল্টারিং । নিয়মিত প্রকাশের মাধ্যমে ফাইলগুলি সহ সমর্থন করে এবং বাদ দেওয়া ing কমান্ডের মতো চালানোর দরকার নেই find ./ -name "*.html" -exec CMD
  • কী-মান ফাইলের মাধ্যমে সংশ্লিষ্ট মান সহ সাবম্যাচটির নামকরণ
  • আরোহী পূর্ণসংখ্যার মাধ্যমে নামকরণ
  • পুনরাবৃত্তভাবে ফাইল এবং ডিরেক্টরি উভয় নামকরণ
  • সমর্থন শুকনো রান
  • রঙিন আউটপুট

COMMAND:

$ brename -f .png -p image
[INFO] checking: [ ok ] 'image0001.png' -> '0001.png'
[INFO] checking: [ ok ] 'image0002.png' -> '0002.png'
[INFO] checking: [ ok ] 'image0003.png' -> '0003.png'
[INFO] 3 path(s) to be renamed
[INFO] renamed: 'image0001.png' -> '0001.png'
[INFO] renamed: 'image0002.png' -> '0002.png'
[INFO] renamed: 'image0003.png' -> '0003.png'
[INFO] 3 path(s) renamed

-5

ls * png | পড়ার সময় -আরএফ; do f2 = "cho প্রতিধ্বনি $ চ | সেড-এর / চিত্র // '` "; এমভি $ এফ $ এফ 2; সম্পন্ন


কিছু ঠিক নেই: "এমভি: 'ইমেজ 10001.png' এর পরে গন্তব্য ফাইল অপারেন্ড"
ইন্টারনেট মানুষ

3
আপনার কোড নিয়ে অনেক সমস্যা আছে। এর আউটপুট পার্সিং lsকরা কেবল সমস্যার জন্য আহ্বান জানায়। readহওয়া উচিত read -r। সমস্ত পরিবর্তনশীল বিকল্পগুলি ডাবল কোটের মধ্যে থাকা উচিত।
গিলস

আপনি আরও কার্যকর হিসাবে এটি লিখতে পারে for f in *png; do f2="$(echo "$f" | sed -e 's/image//')"; mv "$f" "$f2"; done। পার্সিং lsপ্রয়োজনীয় নয় বা একটি ভাল ধারণাও নয়
কোজিরো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.