এই সঙ্গে খুব সহজভাবে সম্পন্ন করা যেতে পারে খোঁজ , যেমন সঠিকভাবে অ্যালেক্স দ্বারা প্রস্তাবিত: সংগ্রহ অভিমানী ফাইল জন্য স্ক্যান করতে path1 / থেকে / / কিছু / Dir , এবং আপনি ফাইল সরানো চান / path2 / / অন্যান্য / Dir / টেক্সট থেকে এবং শীঘ্রই,
find /path1/some/dir -type f -exec bash -c 'MYDIR=/path2/to/other/dir${0##*.}; [ -d $MYDIR ] && mv $0 $MYDIR || mv $0 /path3/to/miscellanea' {} \;
এই কমান্ডটি প্রথমে ডিরেক্টরি / পথ 1 / to / কিছু / dir এবং এর সমস্ত উপ- ডিরেক্টরিতে অন্তর্ভুক্ত সমস্ত ফাইল ( -প্রকার চ ) খুঁজে বের করে , তারপর এই জাতীয় প্রতিটি ফাইলের ( {} ) নাম একটি ছোট বাশ দ্বি-লাইনারে প্রেরণ করে , যা প্রথমে ফাইলের নামটি ( ব্যাশের অভ্যন্তরে $ 0 হিসাবে উল্লেখ করা হয় ) থেকে এক্সটেনশনটি বের করে এবং এটি স্থানীয় শেল ভেরিয়েবল এমওয়াইডিআইআরকে নির্ধারণ করে , তারপরে উপযুক্ত ডিরেক্টরিটির অস্তিত্বের জন্য পরীক্ষা করে (যদি কোনও ডিরেক্টরি নেই, তবে সম্ভবত আমরা ভুল করেছি) , এবং যদি ডিরেক্টরিটি উপস্থিত থাকে ( && ... ) এটি ফাইলটিকে যথাযথ ডিরেক্টরিতে সরিয়ে দেয়, অন্যথায় ( || ... ) এটি ফাইলটিকে একটি ডিফল্ট জায়গায় রাখে, / পথ 3 / থেকে / বিবিধ।
উপরের দিক থেকে ধরে নেওয়া হয়েছে যে আপনি ইতিমধ্যে প্রয়োজনীয় ডিরেক্টরিগুলি, / পাথ 2 / থেকে / অন্যান্য / দির / টিএসটি এবং আরও তৈরি করেছেন। পরিবর্তে আপনি যদি সেগুলি চলতে শুরু করতে চান তবে আপনাকে উপরের হিসাবে এটি সংশোধন করতে হবে:
find /path1/some/dir -type f -exec bash -c 'MYDIR=/path2/to/other/dir/${0##*.}; mkdir -p $MYDIR && mv $0 $MYDIR' {} \;
find
। আপনি এটিকে ওয়ান-লাইনার হিসাবে তৈরি করতে পারেন