টার্মিনাল থেকে ফাইন্ড কমান্ড কার্যকর করার সময় আমি কেবল ফাইল নামের (বাকি পথ ছাড়াই) একটি তালিকা পেতে চাইছি। আমি কীভাবে ম্যাকটিতে এটি সম্পাদন করব?
টার্মিনাল থেকে ফাইন্ড কমান্ড কার্যকর করার সময় আমি কেবল ফাইল নামের (বাকি পথ ছাড়াই) একটি তালিকা পেতে চাইছি। আমি কীভাবে ম্যাকটিতে এটি সম্পাদন করব?
উত্তর:
বেস নাম সহ:
find . -type f -exec basename {} \;
;
এই -exec
ক্রিয়াটি বন্ধ করে দিয়েছে । \
প্রয়োজন কারণ ;
এছাড়াও শেল বিশেষ অর্থ আছে।
ইভিলসপ উল্লেখ করেছিলেন যে যা পোস্ট করা হয়েছিল তা ফাঁক করা ফাইলের নামের জন্য কাজ করে না। সুতরাং পরিবর্তে আপনি ব্যবহার করতে পারেন:
find . -type f -print0 | while IFS= read -r -d '' filename; do echo ${filename##*/}; done
জিএনইউ অনুসন্ধানের সাহায্যে আপনি এটি করতে পারেন:
find ~/tmp/ -printf "%f\n"
এটি সম্ভবত ওএস এক্সেও চেষ্টা করার মতো।
-printf
ওএস এক্স এর বিএসডি সমর্থন করে না find
।
-printf
সি printf
বা পসিক্স শেল ইউটিলিটির সাথে সামান্য সম্পর্ক রাখে printf
। এই historicতিহাসিক ফাংশনটির নামটি অন্য কোনও কিছুর জন্য ব্যবহার করা খুব খারাপ বিবেচনা করা হয়। রক্ষণশীল বিএসডি ছেলেরা সম্ভবত এটি একইভাবে দেখতে পাবে, তাই আমরা সম্ভবত -printf
বিএসডি সন্ধানে সেই নামে ক্লোন দেখতে পাব না ।
ফাইল পথের শেষ অংশ ব্যতীত সমস্ত কিছু কেটে ফেলার আরও ভাল উপায় আছে; অজস্র সহ এটি আরও ভাল কারণ প্রতিটি ফাইলের জন্য awk একবার সম্পাদিত হয় না। কিছু ক্ষেত্রে এটি গুরুত্বপূর্ণ।
find ~/tmp/ -type f | awk -F/ '{ print $NF }'
আমরা কেবলমাত্র ~ / tmp ফাইল অনুসন্ধান করি এবং আমরা একটি তালিকা পাই যেখানে প্রতিটি এন্ট্রি স্ল্যাশ দ্বারা পৃথক করা হয়। অতএব, আমরা ফিল্ড বিভাজক (-F /) হিসাবে স্ল্যাশ ব্যবহার করি এবং ফিল্ড প্যারামিটার ($ 1 .. $ 9) মুদ্রণ করি যা সর্বশেষ ক্ষেত্রের সাথে মিলিত হয় () NF)।
সম্পাদনা :
ব্যবহার sed
:
$ find . -type f | sed 's/.*\///'
@ ওয়ার্ডওয়ালারের প্রতিক্রিয়াতে যেমন xargs কমান্ডটি ব্যবহার করা হয়েছে
$ find . -type f -print0 | xargs --null -n1 basename
find . -type f -print0| xargs --null -n1 basename
--null
-n1
এই সম্পর্কে কি:
find … | egrep -o -e '[^/]+$'
সুবিধা: প্রতিটি ফলাফলের জন্য এক নয়, কেবল একটি অতিরিক্ত প্রক্রিয়া তৈরি হয়।