ওয়াইল্ডকার্ড মিলের ভিত্তিতে আমি কীভাবে বর্তমান এবং সাবফোল্ডারগুলিতে সমস্ত ফাইল পুনরাবৃত্তভাবে খুঁজে পেতে পারি?


1886

ওয়াইল্ডকার্ড মিলের ভিত্তিতে আমি কীভাবে বর্তমান এবং সাবফোল্ডারগুলিতে সমস্ত ফাইল পুনরাবৃত্তভাবে খুঁজে পেতে পারি?

উত্তর:


2737

তার জন্য অনুসন্ধান ব্যবহার করুন :

find . -name "foo*"

findএকটি সূচনা পয়েন্ট প্রয়োজন, এবং .(ডট) বর্তমান ডিরেক্টরিতে পয়েন্ট।


21
আমি জানি এটি লিনাক্স হিসাবে ট্যাগ হয়েছে তবে এটি উল্লেখ করার মতো: লিনাক্স নয় এমন অন্যান্য * নিক্স ভেরিয়েন্টের জন্য পাথটি প্রয়োজনীয়। লিনাক্সে, আপনি ডট ব্যবহার করতে চাইলে পথটি alচ্ছিক।
আইল্যান্ডকো

4
@ সিটার "foo *" "foo" দিয়ে শুরু হওয়া সমস্ত ফাইল সন্ধান করতে বলে। এটি কেবল তাঁর উদাহরণ। আপনি জিপিও দিয়ে শুরু হওয়া সমস্ত ফাইল খুঁজে পেতে "জিপিও *" ব্যবহার করতে পারেন, বা জিপিও 1 নামের সমস্ত ফাইল সন্ধান করতে কেবল "জিপিও 1" ব্যবহার করতে পারেন।
schumacher574

29
নোট করুন যে "foo *" উদ্ধৃতিতে রয়েছে সুতরাং শেলটি এটি সন্ধানের আগে পাস করার আগে এটি প্রসারিত করে না। আপনি যদি স্রেফ এটি find . foo*করেন foo*তবে এটি প্রসারিত হবে এবং এটি অনুসন্ধান করতে পেরিয়ে যাবে।
গিরিচ

32
" "পুনরাবৃত্ত অনুসন্ধানের জন্য প্রয়োজনীয় যে স্ট্রেসিং প্রয়োজনীয়।
ওয়েস্টার্নগন

3
এছাড়াও দরকারী: আপনি যদি ডিরেক্টরি (বা অন্যান্য ত্রুটি) এর অনুমতি নেই এমন ডিরেক্টরি সম্পর্কে আপনাকে অবহিত করতে না চান তবে আপনি এটি করতে পারেনfind . -name "foo*" 2>/dev/null
Jobbo

221

গ্রাইপের মধ্যে পাইপ পাইপ করা প্রায়শই বেশি সুবিধাজনক; এটি আপনাকে স্বেচ্ছাসেবী ওয়াইল্ডকার্ড মিলের জন্য নিয়মিত এক্সপ্রেশনগুলির সম্পূর্ণ শক্তি দেয়।

উদাহরণস্বরূপ, ফাইলের নামের ক্ষেত্রে সংবেদনশীল স্ট্রিং "foo" সহ সমস্ত ফাইল সন্ধান করতে:

~$ find . -print | grep -i foo

56
findএছাড়াও আছে -iname, -regexএবং -iregexতাই বংশীধ্বনিতুল্য, কেস-অবশ ওয়াইল্ডকার্ড, Regex, এবং কেস-অবশ Regex মিলের জন্য পতাকার grepঅপ্রয়োজনীয়।
আইওবেন্ডার 4'15

7
আমি মনে করি এটি অপ্রয়োজনীয় হওয়া সম্পর্কে নয়, তবে আরও সুবিধাজনক।
এলিজা লিন

1
তবে গ্রেপ-ভি-তে পাইপিংয়ের সাহায্যে আপনি চান না এমন এন্ট্রিগুলি সরাতে সরল স্ট্রিং বা রেজিেক্সগুলি ব্যবহার করতে পারবেন।
দরজা_সংখ্যার_পরে

2
@ আইওবেন্ডার - দুঃখের বিষয়, আমি আপনাকে অভিজ্ঞতা থেকে বলতে পারি যে সমস্ত সিস্টেম কোনও findকমান্ড নিয়ে আসে না যা এই বিকল্পগুলি সমর্থন করে। কখনও কখনও grepএকমাত্র বিকল্প হয়ে ওঠে।
মিঃ লালমা

150

find একটি প্যাটার্নের সাথে মেলে এমন সমস্ত ফাইল খুঁজে পাবেন:

find . -name "*foo"

তবে আপনি যদি ছবি চান:

tree -P "*foo"

আশাকরি এটা সাহায্য করবে!


18
brew install treeম্যাক ওএসএক্স ব্যবহারকারীদের জন্য apt-get
ডাব্লু

1
ম্যাকোস সিয়েরায় পরীক্ষিত, কেবল '--প্রিন্ট' -> 'সন্ধান করুন। নাম "* foo" - প্রিন্ট '। superuser.com/questions/177289/searching-mac-through-terminal
জন-salib

2
sudo yum ইনস্টল ট্রি -y CentOS এর জন্য
সন্তোষ কুমার অর্জুনান

39
find -L . -name "foo*"

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


1
এল সুইচ খুব সহায়ক। অনেক সময় ব্যবহারকারীর অন্তর্নিহিত ডিরেক্টরিগুলি সম্পর্কে ধারণা থাকে না, সেগুলি সফ্টলিঙ্কযুক্ত বা সাধারণ ডিরেক্টরি কিনা। সুতরাং সন্দেহের ক্ষেত্রে এল বিকল্পটি ব্যবহার করা সর্বদা ভাল। কমপক্ষে, এটি সর্বদা আমাকে সাহায্য করেছে।
রীতেশ

2
আমার জন্য উত্তর ছিল। ধন্যবাদ!
iedmrc

33

যদি আপনার শেলটি একটি নতুন গ্লোব্বিং বিকল্পটি সমর্থন করে (এর দ্বারা সক্ষম করা যেতে পারে shopt -s globstar), আপনি ব্যবহার করতে পারেন:

echo **/*foo*

পুনরাবৃত্তভাবে কোনও ফাইল বা ফোল্ডার সন্ধান করতে। এটি বাশ 4, zsh এবং অনুরূপ শেল দ্বারা সমর্থিত।


ব্যক্তিগতভাবে আমি এই শেল ফাংশনটি সংজ্ঞায়িত করেছি:

f() { find . -name "*$1*"; }

দ্রষ্টব্য: উপরের লাইনটি সরাসরি শেলতে আটকানো যায় বা আপনার ব্যবহারকারীর ~/.bashrcফাইলে যুক্ত করা যায় ।

তারপরে আমি টাইপ করে যে কোনও ফাইল সন্ধান করতে পারি:

f some_name

বিকল্পভাবে আপনি একটি সাধারণ সিনট্যাক্স সহ কোনও fdইউটিলিটি ব্যবহার করতে পারেন , যেমন fd pattern


1
এটি কেবল একটি একক স্তরে যায়। আমার জন্য উপ ডিরেক্টরিগুলিতে
পুনরাবৃত্তি হচ্ছে

3
@ ব্রোঞ্চা কারণ আপনার shopt -s globstarকমান্ড দ্বারা বর্ধিত গ্লোববিং সক্রিয় করতে হবে । এটি বাশ, zsh এবং অনুরূপ শেলগুলিতে সমর্থিত।
কেনারব

bash-3.2$ shopt -s globstarদেয়bash: shopt: globstar: invalid shell option name
আকস্মিক

@ ড্রুইশ আপনাকে আপনার
বাশকে

প্রতিধ্বনি * / * foo অনুসন্ধানের চেয়ে কম দ্রুত
জোসেফ ক্লিমুক

31

fd

ক্ষেত্রে, findখুব ধীর গতির, fdইউটিলিটি চেষ্টা করুন - findমরচে লিখিত একটি সহজ এবং দ্রুত বিকল্প ।

বাক্য গঠন:

fd PATTERN

ডেমো:

হোমপেজ: https://github.com/sharkdp/fd


17
প্রায় 9 বছরে আমি প্রথমবার এসও তে একটি জিআইএফ দেখেছি। সুন্দর কাজ!
জোশুয়া পিন্টার

1
পারফরম্যান্সের ফলাফলগুলি খুব আশাব্যঞ্জক দেখাচ্ছে। আপনি হোম-
ব্রিউতে এফডি

অফ টপিক: ডেমোর জন্য এসভিজি ফাইল তৈরি করতে আপনি কোন সরঞ্জামটি ব্যবহার করেছেন?
এপ্রোডান

2
@ এপ্রোডান ডেমো চিত্রটি গিটহাব থেকে অনুলিপি করা হয়েছিল, তবে আমি বিশ্বাস করি তারা ব্যবহার করছে asciinema, তারপরে জিআইএফ ফর্ম্যাটে রূপান্তরিত হয়েছে, তবে আমি নিশ্চিত নই।
কেনারব

1
আসলে এটি এসভিজি ফর্ম্যাট, তাই সম্ভবত asciicast2vectorএটি ব্যবহার করা যেতে পারে।
কেনারব

27
find <directory_path>  -type f -name "<wildcard-match>"

ওয়াইল্ডকার্ড-ম্যাচে আপনি যে স্ট্রিংটি মেলতে চান তা প্রদান করতে পারেন উদাহরণস্বরূপ * .c (সমস্ত সি ফাইলের জন্য)


1
আপনার উত্তরটি এখানে সর্বাধিক সঠিক কারণ এটি কেবলমাত্র উল্লিখিত ফাইলগুলি অনুসন্ধান করে। অন্যরা নির্দিষ্ট করে না এমন ডিরেক্টরিগুলি ফিরে আসবে।
উইলসটক

আপনি যদি কোনও ডিরেক্টরি অনুসন্ধান করতে চান তবে "-type f" কে "-type d"
XYZ_Linux

11

তুমি ব্যবহার করতে পার:

# find . -type f  -name 'text_for_search'

আপনি চাইলে আরইজিএক্স ব্যবহার করতে পারেন -iname

# find . -type f  -iname 'text_for_search'

9

নিম্নলিখিত কমান্ডটি বর্তমান এবং এর উপ ফোল্ডারগুলিতে সঠিক নাম "প্যাটার্ন" (উদাহরণস্বরূপ) সমস্ত ফাইল তালিকাভুক্ত করবে।

find ./ -name "pattern"


8

পুনরাবৃত্তকারী ফাইল অনুসন্ধান করার জন্য ডিফল্ট উপায় এবং বেশিরভাগ ক্ষেত্রেই উপলভ্য

find . -name "filepattern"

আপনি যে অবস্থানে রয়েছেন সেখানকার ডিরেক্টরি থেকে ফাইল নাম বা প্যাটার্নের জন্য এটি পুনরাবৃত্ত ট্র্যাভার্সিং শুরু করে। ফাইন্ড কমান্ডের সাহায্যে বিকল্পগুলির পুরো তালিকা দেখতে টাইপ করুন, আপনি ওয়াইল্ডকার্ড এবং বিভিন্ন স্যুইচ ব্যবহার করতে পারেন

man find

অথবা যদি ম্যান পেজগুলি আপনার সিস্টেমে উপলব্ধ না হয়

find --help

যাইহোক, আরও আধুনিক এবং দ্রুত সরঞ্জামগুলি রয়েছে তারপরে সন্ধান করুন যা আপনার পুরো ফাইল সিস্টেমকে অনুসরণ করছে এবং আপনার ফাইলগুলি সূচীকরণ করছে, এই জাতীয় একটি সাধারণ সরঞ্জাম হ'ল সনাক্ত বা স্লোক / এমলোকেট, এটি আপনাকে কীভাবে ইনস্টল করতে হবে সে সম্পর্কে আপনার ওএসের ম্যানুয়াল পরীক্ষা করা উচিত এবং এটি একবারে এটি ইনস্টল করা ডেটাবেস আরম্ভ করা প্রয়োজন, ইনস্টল স্ক্রিপ্ট আপনার জন্য এটি না করে, এটি টাইপ করে ম্যানুয়ালি করা যেতে পারে

sudo updatedb

এবং এটি কোনও নির্দিষ্ট ফাইলের সন্ধানের জন্য ব্যবহার করতে

locate filename

বা, বর্তমান ডিরেক্টরি থেকে ফাইলের নাম বা প্যাটার সন্ধান করতে, আপনি টাইপ করতে পারেন:

 pwd | xargs -n 1 -I {} locate "filepattern"

এটি এর ফাইলগুলির ডাটাবেসগুলির সন্ধান করবে এবং আপনার টাইপ করা প্যাটার্নের সাথে মেলে এমন পথের নামগুলি দ্রুত মুদ্রণ করবে। সনাক্তকরণের বিকল্পগুলির সম্পূর্ণ তালিকা দেখতে, টাইপ করুন: locate --helpবাman locate

অতিরিক্ত হিসাবে আপনি ক্রোন জবের মাধ্যমে নির্ধারিত সময়ে এটির ডেটাবেস আপডেট করার জন্য অবস্থানটি কনফিগার করতে পারেন, তাই নমুনা ক্রোন যা 1am এ ডিবি আপডেট করে তা দেখতে হবে:

0 1 * * * updatedb

এই ক্রোন জবগুলি রুট দ্বারা কনফিগার করা দরকার, যেহেতু আপডেটডবগুলিকে পুরো ফাইল সিস্টেমটি অতিক্রম করার জন্য মূল সুবিধার দরকার হয়।


7

ফাইল অনুসন্ধানের জন্য
find / -xdev -name settings.xml -> পুরো কম্পিউটার
find ./ -xdev -name settings.xml -> বর্তমান ডিরেক্টরি এবং

এক্সটেনশান ধরণের ফাইলগুলির জন্য এটির উপ ডিরেক্টরি

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

6

আমি অবাক হয়ে দেখেছি যে আমরা যখন পুনরাবৃত্তি করতে যাচ্ছি তখন অবস্থানটি খুব বেশি ব্যবহৃত হয় না।

আমি বর্তমানের আগ্রহের ফোল্ডারে ফাইলগুলির তালিকা পেতে প্রথমে একটি "PWD" সনাক্ত করব এবং তারপরে আমি যেমন খুশি তে গ্রেপগুলি চালাব।

locate "$PWD" | grep -P <pattern>

অবশ্যই, এটি ধরে নেওয়া হচ্ছে যে আপডেটবিড করা হয়ে গেছে এবং সূচি পর্যায়ক্রমে আপডেট হয়। এটি অনুসন্ধান চালানো এবং গাছের নীচে যেতে জিজ্ঞাসা করার চেয়ে ফাইলগুলি অনুসন্ধানের এটি আরও দ্রুততর উপায়। সম্পূর্ণতার জন্য এটি উল্লেখ করা। গাছটি খুব ভারী না হলে সন্ধানের ব্যবহারের বিরুদ্ধে কিছুই নেই।


locate "$PWD*.mp4" কেবল মনে করিয়ে দেওয়ার জন্য যে আপনিgrep
যেফেরি কেভ

5

নীচে কমান্ড যেকোন ফাইল অনুসন্ধান করতে সহায়তা করে

) 1) ক্ষেত্রে
2) ফলাফল ছাড়াই ফোল্ডার বাদ দিয়ে
3) আপনার পছন্দসই মূল থেকে বা পথ থেকে অনুসন্ধান করা। আপনার পছন্দের পথটি পরিবর্তন করুন / করুন।

সিনট্যাক্স:
সন্ধান করুন-নাম '' 2> & 1 | grep -v "অনুমতি অস্বীকার"

উদাহরণ

/-নাম 'সি * .xML' 2> & 1 | সন্ধান করুন grep -v "অনুমতি অস্বীকার"

find / -iname '*C*.xml'   2>&1 | grep -v "Permission denied"

1
কেন পৃথিবীতে আপনি এর জন্য গ্রেপ ব্যবহার করেন? স্রেফ find / -iname '*C*.xml' 2>/dev/null
স্টারারকে নালায়

3

আপনি যদি ওয়াইল্ডকার্ডের সাহায্যে বিশেষ ফাইল অনুসন্ধান করতে চান তবে আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

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

মনে করুন, আপনি এখান থেকে প্রতিটি .conf ফাইল অনুসন্ধান করতে চান:

.এর অর্থ অনুসন্ধান এখান থেকে শুরু হয়েছে (বর্তমান স্থান) এর
-typeঅর্থ অনুসন্ধান ফাইলের ধরণ যা এখানে ফাইল (চ)।
-nameএর অর্থ হল আপনি * .conf নামের ফাইল অনুসন্ধান করতে চান ।


3

এটি বর্তমান এবং সাব ডিরেক্টরিগুলিতে সম্পর্কিত সমস্ত ফাইল অনুসন্ধান করবে, তাদের লাইন গণনা পৃথক পাশাপাশি পুরোপুরি গণনা করবে:

find . -name "*.wanted" | xargs wc -l

2

ব্যবহার

find path/to/dir -name "*.ext1" -o -name "*.ext2"

ব্যাখ্যা

  1. প্রথম প্যারামিটারটি ডিরেক্টরিটি আপনি অনুসন্ধান করতে চান।
  2. গতানুগতিক find পুনরাবৃত্তি করে।
  3. এর -oঅর্থ দাঁড়ায় -or। সুতরাং উপরের অর্থ এই ওয়াইল্ডকার্ড বা এটির জন্য অনুসন্ধান করুন। আপনার যদি কেবল একটি প্যাটার্ন থাকে তবে প্রয়োজন নেই-o
  4. ওয়াইল্ডকার্ড প্যাটার্নের চারপাশে উদ্ধৃতিগুলি প্রয়োজনীয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.