কমান্ড সন্ধান করুন: কেস কে উপেক্ষা করবেন?


170

আমি একটি বিশাল ডিরেক্টরি শ্রেণিবিন্যাসে "WSFY321.c" ফাইলটি খুঁজছি।
সাধারণত আমি জিএনইউ অনুসন্ধানটি ব্যবহার করতাম : find . -name "WSFY321.c"
তবে আমি কেসটি জানি না, এটি বড় হাতের অক্ষর, ছোট হাতের অক্ষর বা উভয়ের মিশ্রণ হতে পারে।

এই ফাইলটি সন্ধান করার সবচেয়ে সহজ উপায় কী?
এর চেয়ে ভাল কিছু আছে কি find . | grep -i "WSFY321.c"?

উত্তর:


214

সংক্ষিপ্ত সংবেদনশীল নাম অনুসন্ধানের জন্য জিএনইউর সাম্প্রতিক সংস্করণগুলিতে findএকটি -inameপতাকা রয়েছে।

find . -iname "WSFY321.c"

6
এছাড়াও, যেহেতু আপনি বিশেষত কোনও ফাইল সন্ধান করছেন আপনি সম্ভবত-type f পতাকাটির সাথে অন্য কয়েকটি টিক্স শেভ করতে পারেন যাতে ইনোড কোনও ডিরেক্টরি থাকে তবে এটি নামটির দিকে তাকিয়ে বিরক্ত করবে না। তবে এটি অপ্টিমাইজেশনের
পেডেন্টিক

কিছু রেগেক্সের সাথে কাজ করার জন্য আপনি করতে পারেনfind . -iname \*WSFY321.c\* -type f
বেনজ

40

জিএনইউ অনুসন্ধানের সাথে বা এটির অন্যান্য সংস্করণগুলির সাথে:

find . -iname 'WSFY321.c'

অন্যান্য সংস্করণ সহ:

find . -name '[Ww][Ss][Ff][Yy]321.[Cc]'

বা একটি আপস যা ধীরে ধীরে টাইপ করা সহজ:

find . -name '????321.c' | grep -i '/WSFY[^/]*$'

বা zsh এ:

print -rl -- **/(#i)WSFY321.c

@Gillesgrep সংস্করণ শুধুমাত্র বড় হাতের অক্ষরে ফিল্টারিং, এবং আমি '[^ /] .. (না /) বুঝতে পারছি না
Peter.O

@ গিলস কোন ক্ষেত্রে কোন উদ্ধৃতিই প্রথম ক্ষেত্রে একক উদ্ধৃতি (সঠিক ফাইলের নাম) ব্যবহার করার যুক্তি কী?
বার্নহার্ড

@ Peter.O কোন *পর /ব্যাশ সংস্করণে। আমি বলতে চাইছি grep -i। যার পরিবর্তে ডিরেক্টরিতে ফাইলগুলি না ধরা আমি তার [^/]*চেয়ে বেশি ব্যবহার করি । .*WSFY
গিলস

5
@ বার্নহার্ড ধারাবাহিকতা
গিলস

ধন্যবাদ গিলস: আমি পূর্ববর্তী মন্তব্যটি ভুল সিনট্যাক্স দিয়ে মুছে ফেলেছি এবং প্রশংসিত সংস্করণটি পরীক্ষা করেছি, তবে এটি * ছাড়া (কোনও অপ্রত্যাশিত কারণে; কমপক্ষে আমার কাছে) কাজ করে না। কেস-অবশ বিকল্প আর কাজ করে: shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c... আমি অনুমান যে কারণেই এটি কোনো বলা হয় nocase উল্লিখিত glob : এটি শুধুমাত্র একটি উল্লিখিত glob প্রেক্ষাপটে কাজ করে (অথবা তাই মনে হয়)।
পিটার.ও

1

ম্যাকোসের জন্য দুটি সমাধান:

জিএনইউ ব্যবহার find:

brew install findutils --with-default-names
# restart Terminal
find . -iname 'WSFY321.c'

জিএনইউ ব্যবহার sed:

brew install gnu-sed --default-names
# restart Terminal
find -name "$(sed 's|\([[:alpha:]]\)|[\U\1\L\1]|g' <<<'WSFY321.c')"

1
ম্যাকোস সিয়েরায় -নাম বিকল্পটি ডিফল্টরূপে উপলব্ধ।
থমাস ডাব্লু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.