আমি নীচে বাশ স্ক্রিপ্টে অনুরূপ একটি কমান্ড চালানোর চেষ্টা করছি। এটির সকল সাবফোল্ডারগুলির মধ্যে অনুসন্ধান করা উচিত $sourcedir
এবং একটি নির্দিষ্ট ধরণের সমস্ত ফাইলকে এর মূল স্তরে অনুলিপি করা উচিত $targetdir
।
#!/bin/bash
# These are set as arguments to the script, not hard-coded
sourcedir="/path/to/sourcedir"
targetdir="/path/to/targetdir"
find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2/`basename "$1"`"' "{}" "$targetdir" \;
এটি বেশ কাছাকাছি বলে মনে হচ্ছে, বাদে এটি {}
পাস $2
করা হয়নি-exec sh -c ...
ফাইল নামগুলিতে বিশেষ অক্ষরের (বিশেষত একক উদ্ধৃতি অক্ষর) সহিষ্ণুতা সহ আমি এটি যথাসম্ভব "সঠিক পথে" কাছাকাছি করতে চাই।
সম্পাদনা: আমি লোককে xargs
শৃঙ্খলাবদ্ধ ব্যবহার বা যুক্তি দেওয়ার পরামর্শ দিচ্ছি । আমি এই ধারণার মধ্যে ছিলাম যে এটি কেবলমাত্র সীমিত সংখ্যক যুক্তির জন্য ঠিক। যদি আমার কাছে, উদাহরণস্বরূপ, হাজার হাজার .jpg ফাইল আমি বহু গ্যালারী ডিরেক্টরি থেকে একটি দৈত্য স্লাইডশো ডিরেক্টরিতে অনুলিপি করার চেষ্টা করছি, আর্গুমেন্ট শৃঙ্খলাবদ্ধ সমাধানগুলি এখনও কাজ করবে?
সম্পাদনা 2: আমার সমস্যাটি ছিল আমি কমান্ডটিতে _
শ করার জন্য আমার প্রথম বিকল্পটি হারিয়েছিলাম -exec
। যে কেউ ফাইন্ড কমান্ডটি কীভাবে কাজ করবেন সে সম্পর্কে আগ্রহী, যুক্ত করুন _
এবং সবকিছু ঠিকঠাক হবে:
find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2"' _ "{}" "$targetdir" \;
আমি নীচে একটি উত্তর গ্রহণ করেছি যদিও এটি একই কাজটি সম্পাদন করে তবে আরও দক্ষ এবং মার্জিত।
xargs
সীমাবদ্ধ নিয়মিত কমান্ডগুলিতে স্বয়ংক্রিয়ভাবে বিপুল পরিমাণ আর্গুমেন্ট পরিচালনা করতে কখনও তৈরি করা হয়েছিল। এছাড়াও বিবেচনা করার জন্য, বেশিরভাগ সর্বাধিক যুক্তি সীমা, স্ট্যান্ডার্ড জিএনইউ ব্যবহারের জন্য ব্যাপকভাবে উন্নত করা হয়েছে। হাজার হাজার ফাইলের জন্য প্রাসঙ্গিক avo সমস্ত প্রক্রিয়া কাঁটাচামচ এড়িয়ে আপনি একটি কর্মক্ষমতা সুবিধাও দেখতে পাবেন।