উত্তর:
কেবল বাশ ব্যবহার করুন, বাহ্যিক আদেশগুলি কল করার দরকার নেই।
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
যোগ করবেন না #!/bin/sh
তাদের জন্য যে ওয়ান-লাইনার প্রয়োজন:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/sh
? আমি এই বিবৃতিটি দিয়ে / ছাড়া উভয়েই কাজ করার চেষ্টা করেছি।
#!/bin/bash
। এই কথা বলে, ব্যাশ স্বাভাবিকভাবে অনেকগুলি কম্পিউটার এ ডিফল্ট শেল যাতে আপনি অনেক পার্থক্য খুঁজে পাবে না হয়: ডি আপনি আরো তথ্য পেতে পারেন এখানে
rename
কমান্ড চেষ্টা করুন :
rename 's/_h.png/_half.png/' *.png
হালনাগাদ:
উদাহরণস্বরূপ ব্যবহার:
কিছু সামগ্রী তৈরি করুন
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png three_h.png two_h.png
পরীক্ষার সমাধান:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls
? তুমি কি rename ...
চেষ্টা করছ?
rename
মানক ইউনিক্স সরঞ্জাম নয়।
brew install rename
's//'
- আমি পুরুষকে rename [options] expression replacement file...
rename from util-linux 2.23.2
.
আক্ষরিক বিন্দুর জন্য, কেবল কোনও বিন্দু নয় - যে কোনও অক্ষরের সাথে মেলে মনে রাখবেন , এর \.
পরিবর্তে ব্যবহার করুন
আপনি কি খাঁটি বাশ সমাধান খুঁজছেন? অনেক পন্থা আছে, কিন্তু এখানে একটি।
for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
এটি অনুমান করে যে বর্তমান ডিরেক্টরিতে কেবলমাত্র সেই ফাইলগুলিই _h.png
পুনরায় নামকরণ করতে চায়।
আরও অনেক বিশেষভাবে
for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
এই দুটি উদাহরণ অনুমান করা আপনার একমাত্র। নথি পত্র.
সাধারণ ক্ষেত্রে জন্য ফাইলে পুনঃনামকরনের করেছে জুলুম আবৃত সামনে ।
rename
পার্ল লিখিত ইউটিলিটি ব্যবহার করুন । হতে পারে এটি ডিফল্ট হিসাবে উপলভ্য নয় যদিও ...
$ touch 0{5..6}_h.png
$ ls
05_h.png 06_h.png
$ rename 's/h/half/' *.png
$ ls
05_half.png 06_half.png
আমার একটি অনুরূপ প্রশ্ন ছিল: ম্যানুয়ালটিতে এটি নামটির বর্ণনা দেয়
rename [option] expression replacement file
যাতে আপনি এটি এইভাবে ব্যবহার করতে পারেন
rename _h _half *.png
কোডটিতে: '_h' হ'ল অভিব্যক্তিটি আপনি সন্ধান করছেন। '_হাল্ফ' হল সেই প্যাটার্নটি যা আপনি প্রতিস্থাপন করতে চান। '* .png' হ'ল ফাইলগুলির পরিসীমা যা আপনি আপনার সম্ভাব্য টার্গেট ফাইলগুলি সন্ধান করছেন।
আশা করি এটি গ:
rename
ইউটিলিটি ব্যবহার করুন :
rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
rc@bvm3:/tmp/foo $ rename 's/_h/_half/' *
rc@bvm3:/tmp/foo $ ls -l
total 0
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png
যদিও উত্তর সেটটি সম্পূর্ণ, আমাকে আরও একটি অনুপস্থিত যুক্ত করতে হবে।
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done