কেন আমি * মেইন.ও খুঁজে পাব তবে * .o?


19

এটি সঠিক:

$ find . -name *main.o
./main.o

তো, আমি কেন খুঁজে পাচ্ছি না *.o?

$ find . -name *.o
find: paths must precede expression: main.o
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]


আপনি যেটিকে সঠিক বলেছেন সেটিও ভুল। বর্তমান ডিরেক্টরিতে যদি একটি মিল থাকে এবং উপ-ডিরেক্টরিতে অন্য ম্যাচ হয় তবে উভয়টির একই নাম না থাকলে উভয়ই তা খুঁজে পেতে সক্ষম হবে না। অর্থাৎ আপনার প্রথম উদাহরণে একটি ফাইল বলা যেতে পারে ./sub/domain.o, যা এটি খুঁজে পায় নি।
ক্যাস্পারড

উত্তর:


46

সম্ভবত একাধিক ফাইলের সাথে মেলে *.o, যখন কেবল একটি ফাইল মিলছে *main.o, তাই, প্রথম ক্ষেত্রে শেল এক্সপেনশন চলে:

$ find . -name main.o

এবং এই কাজ করে। দ্বিতীয় ক্ষেত্রে:

$ find . -name file1.o main.o

এবং এ কারণেই আপনি ত্রুটি পেয়েছেন।

এটি রোধ করতে আপনার expressionউভয় আদেশে উদ্ধৃতি দেওয়া উচিত :

$ find . -name '*.o'
$ find . -name '*main.o'

2
নিশ্চয় সহজেই এই পরীক্ষা করতে পারবেন echo *.oবনাম echo '*.o'
রুসলান

@ রুসলান নির্ভর করে, যদি গ্লোব ( *, ?) এর সাথে মেলে কোনও ফাইল না থাকে তবে এটিকে আক্ষরিক চরিত্র হিসাবে বিবেচনা করবে b

@ ব্রোস্লো নিঃসন্দেহে, আমি ওপি যে বিশেষ পরিস্থিতিতে ছিল সে সম্পর্কে বলছিলাম
রুসলান

16

ফাইলের ধরণটি উদ্ধৃতিতে রাখুন। অন্যথায়, * শেল দ্বারা প্রসারিত হয় (ফাইল দেখার আগে ফাইলগুলির তালিকায় সমাধান করা হয়), বিভ্রান্তিকর অনুসন্ধান।

find . -name "*.o"

13
বিকল্পভাবে *একটি ব্যাকস্ল্যাশ দিয়ে পালাতে :find -name \*.o
ডেভিড ফোস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.