আমার অনুরূপ সাবফোল্ডার স্ট্রাকচার সহ দুটি ফোল্ডার রয়েছে, যা আমি তুলনা করতে চাই। উদাহরণ স্বরূপ:
A
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5
এবং
B
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text
আমি সেই সমস্ত সাবফোল্ডারগুলিকে তালিকাবদ্ধ করতে চাই A
যা থেকে সাবফোল্ডারের জন্য উপসর্গ রয়েছে B
এবং সেই সাথে সংশ্লিষ্ট সাবফোল্ডারগুলিকেও তালিকাবদ্ধ করতে চাই B
। প্রত্যাশিত আউটপুট হয়
child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing
একটি গৌণ প্রয়োজনীয়তা: যদি একাধিক মিল থাকে B
তবে এটির একটি ত্রুটি / সতর্কতা দেওয়া উচিত।
আমার সমাধান :
cd A
for f in `ls -d */`;
do
cd B;
new_dirs=(`ls -1d $f*`);
cd -;
if [ ${#new_dirs[@]} -eq 0 ]
then
## DO_Nothing
continue;
elif [ ${#new_dirs[@]} -gt 1 ]
then
echo "Multiple matches to $f";
continue;
else
echo "Unique Match found to $f -- ${new_dirs[0]}";
continue;
fi;
done
সমস্যা:
সেই মানগুলির জন্য $f
, যার কোনও সংশ্লিষ্ট সাবফোল্ডার নেই B
, অ্যারে নির্মাণ আমাকে ত্রুটি দিচ্ছে। উদাহরণ:
ls: 'চাইল্ড -4 *' অ্যাক্সেস করতে পারে না: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই
প্রশ্ন
- কীভাবে এই ত্রুটিগুলি থেকে মুক্তি পাবেন?
- আমার কোডটিতে লক্ষ্য (গুলি) অর্জনের কি আরও ভাল উপায় আছে?
আগাম ধন্যবাদ!
diff -rq DIR1 DIR2
কেবল ডিরেক্টরি কাঠামো নয়, ফাইলের বিষয়বস্তুগুলির তুলনা করতে ব্যবহার করতে পারেন ।