তাদের নামের মাত্র অংশ অনুসন্ধান করে ফাইলগুলি সন্ধান করার কমান্ড?


32

বলুন নামের সাথে ফাইল রয়েছে:

batman.c
debate.c
cricketbat.c

সার্চট্যাগ ব্যবহার করে এই সমস্ত ফাইলের তালিকা তৈরি করতে আমার কোন আদেশ এবং কীভাবে এটি ব্যবহার করা উচিত bat?


5
আপনি কি কেবল বর্তমান ডিরেক্টরিতে ম্যাচের ফাইলগুলি তালিকাবদ্ধ করতে চান? বর্তমান ডিরেক্টরিতে বা নীচে কোনও ডিরেক্টরিতে? সিস্টেমে কোথাও?
স্টিল্ড্রাইভার

উত্তর:


47

batযে কোনও জায়গায় ফাইল সন্ধান করা হচ্ছে

/path/to/folderযার নাম রয়েছে তার ভিতরে যে কোনও ফাইল সন্ধান batকরতে আপনি ব্যবহার করতে পারেন:

find /path/to/folder -name '*bat*'

আমি করেছি উদ্ধৃত অনুসন্ধান প্যাটার্ন *bat*, কারণ যদি কোট বাদ দেওয়া হয়েছে এবং ফাইল মেলে *bat*বর্তমান ডিরেক্টরির মধ্যে, শেল প্রসারিত হবে *bat*তাদের মধ্যে তালিকায় এবং পাস যে করতে find। তাহলে findঠিক কাজ করবে না। ( \*bat\*এবং "*bat*"এছাড়াও কাজ।)

আপনি বর্তমানে যে ফোল্ডারে রয়েছেন তা অনুসন্ধান করতে (যেমন, আপনি যে cdসম্পাদনা করেছেন), .যথারীতি ব্যবহার করুন :

find . -name '*bat*'

আপনার পুরো কম্পিউটারটি অনুসন্ধান করতে, ব্যবহার করুন/ । আপনার হোম ডিরেক্টরি অনুসন্ধান করতে ~, বা আপনার বাড়ির ডিরেক্টরিটির পুরো নাম অনুসন্ধান করুন । ( শেলটি~ আপনার হোম ডিরেক্টরিটির সম্পূর্ণ যোগ্যতার পথে প্রসারিত হয়))

নামের উপর ভিত্তি করে আপনার অনুসন্ধান সম্প্রসারণ বা সঙ্কুচিত করা

আপনি, কেস-insensitively অনুসন্ধান তাই ফাইল ধারণকারী করতে চান BAT, bAtএবং তাই ঘোষণা মেলানো হয়, ব্যবহার -inameপরিবর্তে পরীক্ষা -nameপরীক্ষা:

find /path/to/folder -iname '*bat*'

আপনার সমস্ত ফাইল শেষ হয়ে গেছে আমি লক্ষ্য করেছি .c। আপনি যদি কেবল সে জাতীয় ফাইলগুলি সন্ধান করতে চান তবে ব্যবহার করুন:

find /path/to/folder -name '*bat*.c'

আমি লক্ষ্য করেছি যে আপনার সমস্ত ফাইলের নাম প্রত্যক্ষের batপূর্ববর্তী অংশের একেবারে শুরুতে বা একেবারে শেষে রয়েছে .c। আপনি যদি এই জাতীয় ফাইলগুলি মিলে এড়াতে চান তবে আপনি এটি embattled.cব্যবহার করতে পারেন:

find /path/to/folder -name '*bat.c' -o -name 'bat*.c'

-oহয় বা অপারেটর।

মিলছে কেবল ফাইলগুলি

কেবল নিয়মিত ফাইলগুলি অনুসন্ধান করতে - এবং ফোল্ডার, প্রতীকী লিঙ্ক এবং বিশেষ ডিভাইস নোড নয় - আপনি ব্যবহার করতে পারেন -type f। এটি প্রায়শই প্রস্তাবিত এবং কখনও কখনও বেশ উপযুক্ত ... তবে আপনি যা চান তা প্রায়শই তা নয় , বিশেষত যদি আপনি findনিজে আউটপুট পরীক্ষা করার উদ্দেশ্যে চালাচ্ছেন । যদি আপনার একটি প্রতীকী লিঙ্ক থাকে যা আপনার অনুসন্ধানের সাথে মিলে যায় তবে আপনি কি এটি সম্পর্কে জানতে চান না?

আপনি যদি নিয়মিত ফাইল এবং প্রতীকী লিঙ্ক উভয়ই সন্ধান করতে চান তবে আপনি ব্যবহার করতে পারেন:

find /path/to/folder -name '*bat*' \( -type f -o -type l \)

এটি -oঅপারেটর এবং গোষ্ঠীকরণের জন্য প্রথম বন্ধনীও ব্যবহার করে (যা উদ্ধৃত হওয়া আবশ্যক যাতে শেল তাদের সাথে বিশেষ ব্যবহার করে না; অন্যথায় আপনি একটি বাক্য গঠন ত্রুটি পাবেন)।

তবে ধরুন আপনি কেবল প্রতীকী লিঙ্কগুলি দেখতে চান যা শেষ পর্যন্ত একটি নিয়মিত ফাইলের দিকে নির্দেশ করে (এবং ডিরেক্টরিগুলি, ডিভাইস নোড ইত্যাদির ক্ষেত্রে প্রতীকী লিঙ্ক নয়)। এটি আসলে আরও সহজ: -xtypeপরিবর্তে ব্যবহার করুন -type। প্রদত্ত যে আপনি পতাকা findনিয়ে চলছেন না -L, -xtypeএকটি প্রতীকী লিঙ্কে লিঙ্কটি যে ফাইলটির দিকে নির্দেশ করে তা পরীক্ষা করে।

find /path/to/folder -name '*bat*' -xtype f

আপনার যদি কোনও ফাইলের সাথে অন্য একটি সিমলিংকের কাছে একটি সিমলিংক থাকে -xtype fতবে এটি সরাসরি মিলবে যদিও এর প্রত্যক্ষ লক্ষ্যটি নিয়মিত ফাইলের পরিবর্তে অন্য একটি সিমলিংক। এটি প্রায় সবসময় আপনি যা চান তা হয়।

প্রায়শই লোকেরা মনে করে যে তারা চায় -type fতবে সত্যই তারা চায় -xtype f

বিস্তারিত আউটপুট পাচ্ছেন

findআপনি যদি একটি নির্দিষ্ট না করে তবে এর ডিফল্ট ক্রিয়া -print। উপরে বর্ণিত সমস্ত কমান্ডগুলি -printশেষে সমাপ্ত হওয়ার সাথে সমতুল্য ।

findপ্রায়শই পাওয়া ফাইলগুলির উপর ভিত্তি করে কমান্ড চালাতে ব্যবহৃত হয় - প্রায়শই, কমান্ডগুলি যে পরিবর্তন করে। তবে এছাড়াও অন্যান্য পদক্ষেপ রয়েছে যার উদ্দেশ্য ফলাফল প্রদর্শন করা -print। বিশেষ আগ্রহ হ'ল -ls:

find /path/to/folder -name '*bat*' -ls

এটি প্রতিটি ফাইলের উপর একাধিক-কলামের ফর্ম্যাটে বিশদ তথ্য দেয় যা আপনি চালিয়ে যা দেখবেন তার অনুরূপ (যদিও তেমন একরকম নয়) ।ls file

আরও পড়া

findফাইলগুলি আবিষ্কার করার জন্য এবং অন্যান্য উপায়গুলির জন্য আরও তথ্যের জন্য , দেখুন:


1
দুর্দান্ত উত্তর, বিশেষত -xtypeপরামর্শ; সম্ভবত ls *bat*এবং -maxdepth/ mindepthএছাড়াও উল্লেখযোগ্য।
mklement0

2
@ এম কেলেটমেন্ট 0 ধন্যবাদ! ফাইলগুলি কোথায় এবং পুনরাবৃত্তি প্রয়োজন কিনা তা নিয়ে ওপি এখনও স্পষ্টতা দেয়নি । বিশৃঙ্খলার উত্তরls ইতিমধ্যে আচ্ছাদিত হিসাবে , আমি findএখানে সঙ্গে পুনরাবৃত্তির ক্ষেত্রে ফোকাস । অবশ্যই, অ (বা কম) -র বিস্তৃত একটি উত্তর উত্তর-কিছু প্যাটার্ন ( lsএবং এর findসাথে -maxdepth) মিলে যাওয়া ফাইলের নামের ক্রিয়াকলাপ তালিকাও দরকারী। আপনি যেমন একটি উত্তর পোস্ট করতে চাইতে পারেন!
এলিয়াহ কাগন

16

সবচেয়ে সহজ উপায় চালানো

locate bat

এইভাবে আপনি ফাইলের নামের "ব্যাট" ধারণকারী ফাইলগুলির জন্য পুরো কম্পিউটারের মাধ্যমে অনুসন্ধান করতে পারেন

আপনার পিসিতে চালিত ফাইলগুলির তালিকাটি রিফ্রেশ করুন

updatedb

আপনি যখন সম্প্রতি নিজের অ্যাকাউন্টে নতুন ফাইল যুক্ত করেছেন তখন এই কমান্ডটি চালান


1
প্রয়োজনupdatetdb
সের্গেই কলডিয়াজহনি

4
@ সার্গ নতুন ফাইলগুলি সন্ধান করতে ( updatedbসর্বশেষে ম্যানুয়ালি বা স্বয়ংক্রিয়ভাবে চালিত হওয়া সময়ের চেয়ে নতুন ) sudo updatedbপ্রথমে চালানো দরকার, হ্যাঁ।
এলিয়াহ কাগন

মনে রাখবেন যে এটি নামের সাথে মিলে যাওয়ার জন্য পুরো সিস্টেমটি অনুসন্ধান করবে bat
terdon

1
@ ইটারডন আমি ইতিমধ্যে উত্তরে এটি বলেছি, যখনই আমি ইতিমধ্যে এটি বলেছি তখন মনে হয় না যে এটি নিচের ভোটের যোগ্য ছিল।
মার্ক কির্বি

1
মনে রাখবেন যে, এই অনেক চেয়ে দ্রুত find /হিসাবে locateকোন ডেটাবেস থেকে অনুসন্ধান, যখন findযাও recursively তালিকা /এবং তারপর Regex সাথে মেলে।
টিমোথি গু

14

টার্মিনালটি খুলুন এবং ডিরেক্টরিটি ডিরেক্টরিতে পরিবর্তন করুন যেখানে আপনি অনুসন্ধান শুরু করতে চান এবং তারপরে এই কমান্ডটি চালান:

find . -name "*bat*" -type f 

.বর্তমান ডিরেক্টরি থেকে অনুসন্ধান কমান্ড শুরু করে The স্ট্রিং মিলে যায় এবং কেস সংবেদনশীল। ( কেস অবশ হয়) শুধুমাত্র ফাইলের জন্য অনুসন্ধান।
-namebat-iname
-type f


মুছুন এবং মুছে ফেলুন? ঠিক আছে +1: পি;)
এবি

6

যদি ফাইলগুলি বর্তমান ডিরেক্টরিতে থাকে তবে ব্যবহার করুন:

$ ls *bat*
batgirl.c  batman.c  batwoman.c  cricketbat.c

অথবা (সেগুলি লাইন ধরে রেখার জন্য):

$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c

আপনি যদি এই ফাইলগুলির জন্য সিস্টেমটি অনুসন্ধান করতে চান তবে ব্যবহার করুন:

$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c

1
যদি আপনার অনুসন্ধানটি মূল ডিরেক্টরিটি দিয়ে শুরু হয়, আপনি sudo যুক্ত করতে চাইতে পারেন, কারণ এই আদেশটি কিছু ফোল্ডারের জন্য 'অনুমতি প্রত্যাখ্যান' প্রতিবেদন করবে
সের্গেই কলডিয়াজহনি

4

সংক্ষিপ্ত ফাইলের নামের সাথে মিলের জন্য বিকল্প বা কেস সংবেদনশীল ফাইলের নামের সাথে মেলে findএমন -inameবিকল্পের সাহায্যে আপনি কমান্ডটি ব্যবহার করতে চান -name। এই দুটিই আপনাকে ওয়াইল্ডকার্ডের নাম ব্যবহার করতে দেবে। সুতরাং, "ব্যাট" রয়েছে এমন কোনও ফাইলের নাম খুঁজতে আপনি ব্যবহার করবেন:

find / -iname '*bat*'

অথবা

find / -name '*bat*'

এর *অর্থ "যে কোনও অক্ষর (গুলি)", তাই অনুসন্ধান এর batআগে বা পরে কোনও অক্ষর সহ কোনও অক্ষর অনুসন্ধান করছে । /রুট ডিরেক্টরি থেকে অনুসন্ধান করার যাও recursively, আপনি ব্যবহার করতে পারেন .যা বর্তমান ডিরেক্টরি অথবা তুমি কোথা থেকে অনুসন্ধান করতে চান জন্য পরম পথ থেকে যাও recursively অনুসন্ধান করবে। লিনাক্স শেল স্ক্রিপ্টে রেজেক্স ব্যবহার করে কীভাবে ফাইলগুলি অনুসন্ধান করা যায় তা একবার দেখুন


এলিয়াকাগান ধন্যবাদ, আমি আমার উত্তরে আরও কিছু তথ্য যুক্ত করেছি।
এজেফেরিস

+1 সম্পাদনার জন্য ধন্যবাদ। আইএমও এটি এই উত্তরের একটি শক্তি যা এটি নির্বিচারের ব্যবহারের সুপারিশ করা এড়িয়ে যায়-type f , যা কেবল ডিরেক্টরি বাদ দিয়ে বেশি করে এবং ব্যবহারকারীরা যা চায় তা প্রায়শই হয় না
এলিয়াহ কাগন

2

ভাল পুরানো ব্যবহার করুন find

find <path_for_search> -type f -iname "*bat*" 

যেমন .:

% find . -type f -iname "*bat*" 
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c

থেকে man find:

-type c
          File is of type c:
          [..]
          d      directory
          [..]
          f      regular file
          [..]

-iname pattern 
          Like -name, but the match is case insensitive.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.