আমার :
নামের মধ্যে একটি ফাইল রয়েছে (কোলন)। আমার :
সাথে -
(ড্যাশ) প্রতিস্থাপন করতে হবে ।
কোনও স্ক্রিপ্টে এটি করার সহজ উপায় কি আছে?
নমুনা ফাইলের নাম: 2013-10-11:11:52:08_055456663_045585_.txt
আমার :
নামের মধ্যে একটি ফাইল রয়েছে (কোলন)। আমার :
সাথে -
(ড্যাশ) প্রতিস্থাপন করতে হবে ।
কোনও স্ক্রিপ্টে এটি করার সহজ উপায় কি আছে?
নমুনা ফাইলের নাম: 2013-10-11:11:52:08_055456663_045585_.txt
উত্তর:
একটি সাধারণ 1-রেখারটি sh
করণীয় (অনুমান করুন পিক্সিক - সামঞ্জস্যপূর্ণ শেল):
for f in *:*; do mv -v "$f" $(echo "$f" | tr ':' '-'); done
ব্যাখ্যা:
for ... in ...; do ...; done
একটি লুপ হয়
*:*
বর্তমান ডিরেক্টরিতে সমস্ত ফাইল এবং ডিরেক্টরিগুলির সাথে মিল রয়েছে যা :
তাদের নামে রয়েছে
f
লুপের মধ্যে প্রতিটি ফাইলের নামের পরিবর্তে বরাদ্দ করা হয়
mv
দ্বিতীয়টির সাথে তার প্রথম যুক্তির নাম পরিবর্তন করে; -v
(ক্রিয়াপদ) এটি কী করে তা মুদ্রণ করতে বলে; এই বিকল্পটি জিএনইউ-ব্যবহারগুলি নির্দিষ্ট, সুতরাং এটি লিনাক্সে উপলব্ধ তবে সোলারিসে নয়
$(...)
একটি উপ-শেল কোডটি কার্যকর করে এবং আউটপুট প্রতিস্থাপন করে
echo
স্ট্যান্ডার্ড আউটপুটে তার যুক্তি মুদ্রণ করে
tr
সরবরাহকৃত মানচিত্র অনুসারে মানক আউটপুট পড়ে এবং অক্ষর অনুবাদ করে
আপনি ব্যবহার করে থাকেন ব্যাশ , আপনি একটি অতিরিক্ত শেল (ডিম ছাড়ার এড়াতে পারেন $()
উপ-প্রক্রিয়া) ( tr
প্রতিস্থাপন দ্বারা) $(...)
সঙ্গে ${f//:/-}
।
$(echo "$f" | tr ':' '-')
সাথে প্রতিস্থাপন করতে পারেন "${f//:/-}"
এবং সাবশেল, পাইপ এবং বহিরাগত প্রোগ্রাম কল এড়াতে পারেন । আমি মনে করি এটি বাশিজম, তবে এহ। এখানে দেখুন ।
আমি নিশ্চিত যে ইউনিক্সের একজন প্রো বাশ দিয়ে এটি করতে পারে তবে রুবি সহ আমার দ্রুত এবং নোংরা সংস্করণ এখানে।
path_to_files = "/home/username/wrongnames/"
filenames = `ls #{path_to_files}`.split
filenames.each do |fn|
`mv #{path_to_files + fn} #{path_to_files + fn.gsub(/:/, "-")}`
end
আপনার ভুল নাম দেওয়া ফাইলের পথে path_to_files সেট করুন। উপরের কোডটি পুনঃনাম.আরবি নামে একটি ফাইলে সংরক্ষণ করুন:
username@machinename$ ruby rename.rb
আপনার যদি মাত্র একটি বা কয়েকটি ফাইল থাকে তবে এটি আপনার জন্য নাম পরিবর্তন করতে পারে:
p="201*"
।old_name=$(ls | grep $p)
।সঞ্চয় করুন নতুন ফাইল নাম প্রয়োজনীয় অক্ষর প্রতিস্থাপন সঙ্গে
new_name=$(ls | grep $p | sed 's/:/_/g') # Using 'sed'
OR
new_name=$(ls | grep $p | tr ':' '_') # Using 'tr'
বোনাস পরিষ্কার :
ক। যদি অভিন্নতার স্বার্থে আপনি-
কলোনগুলি (:
) এর সাথে আন্ডারস্কোর (_
)দিয়েপ্রতিস্থাপন করতে চান তবে আপনি এটিকরতে পারেন:
new_name=$(ls | grep $p | tr ':-' '_');
খ। আপনি যদি সর্বশেষ আন্ডারস্কোরটি চান (ঠিক আগে .txt
) ভালভাবে চলে যান তবে new_name
চলকটি সেট করুন :
new_name=$(ls | grep $p | tr ':-' '_' | sed 's/_\./\./')
mv $old_name $new_name
এনবি: mv
পুনর্নবীকরণের ক্রিয়াকলাপের কোনও ফাইলের নাম থাকলে তা ব্যর্থ spaces
হবে। সেক্ষেত্রে যথাযথ ভেরিয়েবলগুলি উদ্ধৃতিতে মুছুন, যেমন: mv "$old_name" $new_name
OR mv $old_name "$new_name"
OR OR mv "$old_name" "$new_name"
1a: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | sed 's/:/_/g'); mv $old_name $new_name
1b: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | tr ':' '_'); mv $old_name $new_name
2: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | tr ':-' '_'); mv $old_name $new_name
3: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | tr ':-' '_' | sed 's/_\./\./'); mv $old_name $new_name
ব্যবহার পুনঃনামকারক :
$ renamer --find ":" --replace "-" *
rename
এমন একটি সরঞ্জাম যা অনেকগুলি লিনাক্স বিতরণে ইনস্টল করা থাকে। তবে আমি মনে করি উইন্ডোজের জন্য এই সরঞ্জামটি দুর্দান্ত হতে পারে।
এটি ওভারকিল হতে পারে তবে আপনি এই উত্তরে প্রদত্ত লিঙ্কটিতে স্ক্রিপ্টের সাথে কোনও বিশেষ অক্ষরের নাম পরিবর্তন করতে পারেন:
for f in
... লুপটি এমন একটি লুপ যা বর্তমান ডিরেক্টরিতে সমস্ত ফাইলের পুনরুক্তি করে যেখানে ফাইলগুলি মেলানো দরকার*:*
। (যা মিলছে ডায়ারের সাথে কী ঘটে?)। মুভ কমান্ড হ'ল একটি মুভ পুরানো নাম নতুন নাম যেখানে শেলটি দিয়ে চালিয়ে নতুন নাম তৈরি করা হয়$( subshell here )
। টিআর কী করে, ...