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
? নাম পরিবর্তনের স্ক্রিপ্টটি বাতিল করা উচিত বা কেবল সতর্ক করা এবং চালিয়ে যেতে হবে? ২. ইউএস-এএসসিআইআই নামগুলির জন্য আপনি নিম্ন কেসটি কীভাবে সংজ্ঞায়িত করবেন? যদি এই জাতীয় নামগুলি উপস্থিত থাকতে পারে, তবে কি একবার চেক করে বাদ দেওয়া উচিত? ৩. যদি আপনি একটি নতুন নাম অপারেশন চালাচ্ছেন