এটি নির্দিষ্ট করা হয়নি, তবে কেউ আগ্রহী হলে এখানে নিয়মিত প্রকাশ ছাড়াই একটি সমাধান।
আমরা ব্যবহার করতে পারি find . -type f
, তাহলে কাজে লাগাতে শুধু ফাইল পেতে dirname
এবং basename
শর্তাধীন লিখতে। ইউটিলিটিগুলির নিম্নলিখিত আচরণ রয়েছে:
$ find . -type f
./dir2/spam/spam.pdf
./dir2/dir2.tex
./dir3/dir3.pdf
./dir3/eggs/eggs.pdf
./dir1/dir1.pdf
./dir1/dir1.txt
basename
শেষের পরে ফাইলের নামটি দেয় /
:
$ for file in $(find . -type f); do basename $file; done
spam.pdf
dir2.tex
dir3.pdf
eggs.pdf
dir1.pdf
dir1.txt
dirname
ফাইনাল পর্যন্ত পুরো পথ দেয় /
:
$ for file in $(find . -type f); do dirname $file; done
./dir2/spam
./dir2
./dir3
./dir3/eggs
./dir1
./dir1
অতএব, basename $(dirname $file)
ফাইলের পিতামহিত ডিরেক্টরি দেয়।
$ for file in $(find . -type f); do basename $(dirname $file) ; done
spam
dir2
dir3
eggs
dir1
dir1
সমাধান
শর্তসাপেক্ষ গঠনের জন্য উপরের সংমিশ্রণ করুন "$(basename $file)" = "$(basename $(dirname $file))".pdf
, তারপরে find
যদি প্রতিটি শর্তসাপেক্ষে সত্য হয় তবে কেবলমাত্র প্রতিটি ফলাফল মুদ্রণ করুন ।
$ while read file; do if [ "$(basename "$file")" = "$(basename "$(dirname "$file")")".pdf ]; then echo $file; fi done < <(find . -type f)
./dir2/spam/spam.pdf
./dir3/dir3.pdf
./dir3/eggs/eggs.pdf
./dir1/dir1.pdf
./Final Thesis/grits/grits.pdf
./Final Thesis/Final Thesis.pdf
উপরের উদাহরণে, আমরা সেই ক্ষেত্রে চিকিত্সা করার জন্য নামে ফাঁকা জায়গায় একটি ডিরেক্টরি / ফাইল যুক্ত করেছি (মন্তব্যগুলিতে @ কুশালানন্দকে ধন্যবাদ)