find . -depth -name '*[A-Z]*'|sed -n 's/\(.*\/\)\(.*\)/mv -n -v -T \1\2 \1\L\2/p'|sh
আমি এখানে উল্লিখিত আরও বিস্তৃত স্ক্রিপ্টগুলি চেষ্টা করিনি, তবে একক কমান্ডলাইন সংস্করণ আমার সিএনোলজি এনএএস-এ আমার জন্য কাজ করে নি। renameউপলভ্য নয় এবং findব্যর্থতার অনেকগুলি প্রকারভেদ কারণ এটি ইতিমধ্যে পুনরায় নামকরণ করা পথের পুরানো নামটির সাথে লেগে গেছে বলে মনে হয় (যেমন, যদি এটি ./FOOঅনুসরণ করে তবে ./FOO/BARপুনরায় নামকরণ ./FOOকরা ./fooএখনও তালিকা অবিরত থাকবে ./FOO/BARযদিও সেই পথটি আর বৈধ নয়) । উপরের কমান্ডটি কোনও সমস্যা ছাড়াই আমার পক্ষে কাজ করেছে।
নিম্নলিখিতটি হ'ল কমান্ডের প্রতিটি অংশের ব্যাখ্যা:
find . -depth -name '*[A-Z]*'
এটি .ডিপথ-ফার্স্ট অনুসন্ধান (উদাহরণস্বরূপ, এটি ./foo/barআগে তালিকাভুক্ত করবে) ব্যবহার করে বর্তমান ডিরেক্টরি থেকে যে কোনও ডিরেক্টরি ( আপনি যে ডিরেক্টরিতে প্রক্রিয়া করতে চান তা পরিবর্তন করুন) থেকে কোনও ফাইল খুঁজে পাবেন ./fooতবে কেবল সেই ফাইলগুলির জন্য যা বড় হাতের অক্ষর ধারণ করে। -nameফিল্টারটি কেবলমাত্র পুরো ফাইলের নাম নয়, কেবল ফাইল ফাইলের নামের সাথে প্রযোজ্য। সুতরাং এই তালিকা ./FOO/BARকিন্তু না ./FOO/bar। এটি ঠিক আছে, কারণ আমরা নাম পরিবর্তন করতে চাই না ./FOO/bar। আমরা ./FOOযদিও নাম পরিবর্তন করতে চাই তবে এটির পরে তালিকাবদ্ধ করা হয়েছে (এ কারণেই -depthএটি গুরুত্বপূর্ণ)।
এই কোমন্ড নিজেই সেই ফাইলগুলি সন্ধান করতে বিশেষভাবে কার্যকর যা আপনি প্রথমে নাম পরিবর্তন করতে চান to ফাইলের নাম সংঘর্ষ বা ত্রুটির কারণে এখনও প্রতিস্থাপন করা হয়নি এমন ফাইলগুলির সন্ধান করতে সম্পূর্ণ নামকরণ কমান্ডের পরে এটি ব্যবহার করুন।
sed -n 's/\(.*\/\)\(.*\)/mv -n -v -T \1\2 \1\L\2/p'
এই অংশটি আউটপুট করা ফাইলগুলি পড়ে findএবং mvনিয়মিত এক্সপ্রেশন ব্যবহার করে একটি কমান্ডে তাদের ফর্ম্যাট করে । -nবিকল্প স্টপ sedইনপুট মুদ্রণ থেকে, এবং pঅনুসন্ধান-এবং-প্রতিস্থাপন Regex আউটপুট প্রতিস্থাপিত টেক্সট কমান্ড।
রেজেক্স নিজেই দুটি ক্যাপচার নিয়ে গঠিত: শেষ / শেষ পর্যন্ত অংশ (যা ফাইলের ডিরেক্টরি) এবং ফাইলের নাম নিজেই। ডিরেক্টরিটি অক্ষত রয়েছে, তবে ফাইলের নামটি ছোট হাতের অক্ষরে রূপান্তরিত হয়। সুতরাং, যদি findআউটপুট ./FOO/BAR, এটি হয়ে যাবে mv -n -v -T ./FOO/BAR ./FOO/bar। -nবিকল্প mvনিশ্চিত ছোট হাতের ফাইল বিদ্যমান তোলে ওভাররাইট নেই। -vবিকল্প তোলে mvপ্রতিটি পরিবর্তন এটি তোলে (- যদি বা দেখা যায় না আউটপুট ./FOO/barআগে থেকেই আছে, এটা ভালো কিছু আউটপুট ./FOO/BAR -> ./FOO/BAR, তিনি উল্লেখ করেছেন পরিবর্তন করা হয়েছে)। -Tএখানে খুবই গুরুত্বপূর্ণ - এটা ডাইরেক্টরি হিসাবে লক্ষ্য ফাইল একইরূপে। এটি নিশ্চিত করে তুলবে যে ডিরেক্টরিটি বিদ্যমান থাকলে সেটি ./FOO/BARসরানো হয়নি ./FOO/bar।
findকার্যকর করা হবে এমন কমান্ডগুলির একটি তালিকা তৈরি করতে এটির সাথে একসাথে ব্যবহার করুন (আসলে তা না করে যা করা হবে তা যাচাই করতে সহজ)
sh
এটি বেশ স্ব-ব্যাখ্যামূলক। এটি সমস্ত উত্পন্ন mvকমান্ড শেল ইন্টারপ্রেটারে নিয়ে যায়। আপনি এটিকে bashবা আপনার পছন্দসই শেলটি প্রতিস্থাপন করতে পারেন ।
ABCdef,abcDEFএবংaBcDeF? নাম পরিবর্তনের স্ক্রিপ্টটি বাতিল করা উচিত বা কেবল সতর্ক করা এবং চালিয়ে যেতে হবে? ২. ইউএস-এএসসিআইআই নামগুলির জন্য আপনি নিম্ন কেসটি কীভাবে সংজ্ঞায়িত করবেন? যদি এই জাতীয় নামগুলি উপস্থিত থাকতে পারে, তবে কি একবার চেক করে বাদ দেওয়া উচিত? ৩. যদি আপনি একটি নতুন নাম অপারেশন চালাচ্ছেন