কিছু নির্দিষ্ট ডিরেক্টরিতে "সনাক্ত" ব্যবহার করবেন?


46

আমি ভাবছিলাম কীভাবে "ডিরেক্টরি" অনুসন্ধানের সীমাটি কোনও ডিরেক্টরিতে সীমাবদ্ধ করবেন?

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

ধন্যবাদ এবং শুভেচ্ছা!

উত্তর:


30

আপডেট : এর আরগস সনাক্ত করার সাথে সাথে শেলের ফাইলের নাম বিস্তৃত করার জন্য সনাক্তকরণের রেজেক্স বিকল্পটি ব্যবহার করার বিষয়ে একটি নোট ...

ফাইল ফাইলটি ব্যয় করুন
যখন আপনি টাইপ করুন locate /bin/b*(নোট নেই যে কোনও উদ্ধৃতি নেই), বেশ কয়েকটি জিনিস ঘটে।

  1. প্রথমত, শেল ফাইলের নাম- প্রসারণটি বিশেষ শেল প্যাটার্নের পাঠক * প্রসারিত করবে (এটি কারণ * সুরক্ষিত নয়, অর্থাত্ "কোনও" ডাবল-কোটস "নেই)
  2. এই ফলস্বরূপ সম্প্রসারণ ফাইল নামগুলির একটি তালিকা । যা সম্ভবত খুব দীর্ঘ ... এই তালিকাটি locateঅনেকগুলি স্বতন্ত্র কমান্ডলাইন আর্গগুলিতে দেওয়া হয়েছে।
  3. locate তারপরে এর ডাটাবেসের প্রতিটি ফাইলের বিপরীতে এই আরগগুলির প্রত্যেকটি পরীক্ষা করে এবং ফলাফলগুলি ম্যাচ করে।

তবে খেয়াল রাখুন যে 'সনাক্তকরণ' এর বর্তমান ওয়ার্কিং ডিরেক্টরি সম্পর্কে কোনও ধারণা নেই। এটি কেবলমাত্র তার ডাটাবেসে সম্পূর্ণ-যোগ্য ফাইল-নামের বিরুদ্ধে আপনার আরগগুলির সাথে মেলে ।
এর অর্থ এটি উভয়ের সাথে মিলবে /bin/bash এবং /home/user/bin/brackets
আপনার কিছুটা নিয়ন্ত্রণ রয়েছে এইভাবে, তবে সনাক্তকরণের রেজেক্স অনুসন্ধান আরও প্রস্তাব দেয়; যেমন সনাক্ত অন্যান্য বিকল্পের অন্যান্য।

লোক্টের রেগেক্স বিকল্প
যখন আপনি টাইপ করেন তখন সাধারণ আরগগুলিরlocate -r "/bin/b.*" চেয়ে ভিন্ন কিছু ঘটে .. ( শেল-প্রসারিত-আরোগুলি কেবল সহজ অর্গগুলির একটি তালিকা)

  1. -rবিকল্প বলে সনাক্ত একটি Regex প্যাটার্ন হিসাবে আপনার ARG চিকিত্সা।
  2. উদ্ধৃতি চিহ্নগুলি শেল ফাইলের নাম-প্রসার থেকে * রক্ষা করে। এর অর্থ হল * এবং বিন্দু। এখন বিশেষ রেগেক্স অক্ষর
  3. রেজেক্স হওয়ার কারণে, আপনি খুব সহজেই তার অবস্থানের ডেটাবেস এন্ট্রিটি বিভিন্ন উপায়ে মেলাতে 'চিহ্নিত' বলতে পারেন: উদাহরণস্বরূপ। locate -r "^/bin/b.*"ফাইল ফাইলের নাম / বিন / বি দিয়ে শুরু করে ... উদাহরণস্বরূপ। locate -r ~/"bin/b.*"ফাইল নাম / home / ব্যবহারকারী / বিন / বি দিয়ে শুরু করে .. নোট করুন যে ~ / "" উদ্ধৃতি-চিহ্নগুলি "দ্বারা সুরক্ষিত নয় এবং তাই শেল টিলড-প্রসারণের সাপেক্ষে যা ~ / ঘরে / ঘরে / ব্যবহারকারী / রূপান্তর করে

সংক্ষিপ্তসার: "শেল ফিলামনাম এক্সপেনশন" 'রেজেক্স' থেকে বেশ আলাদা

এখন মূল পোস্টে ফিরে:


locate সাধারণত পুরো ডাটাবেসকে স্টডআউটে তালিকাবদ্ধ করে, তাই এটি নির্দিষ্ট ডিরেক্টরিতে সীমাবদ্ধ করার জন্য আপনাকে এটি ফিল্টার করতে হবে ... আপনি সনাক্তকরণের বিকল্পগুলির মাধ্যমে এটি করতে পারেন।

আপনি কেবল শেল-গ্লোব্বিংয়ের পরিবর্তে সনাক্তকরণের রেজেক্স ক্ষমতাটি ব্যবহার করতে পারেন ... ( locate /dir/myfile* শেল-গ্লোব্বিং) ...

থেকে তথ্য সনাক্ত : -r,--regex

  • "... (Regex) ম্যাচ গোটা পাথ নাম বিরুদ্ধে সঞ্চালিত হয়, এবং তাই ডিফল্ট ভাবে একটি পথনাম মিলেছে করা হবে যদি এর কোনো অংশ নিদিষ্ট রেগুলার এক্সপ্রেশন সাথে মেলে। রেগুলার এক্সপ্রেশন ব্যবহার করতে পারেন ^ বা $ একটি ম্যাচের অ্যাঙ্করে কোনও পথের নামের শুরু বা শেষ "

দ্রষ্টব্য: -i = কেস উপেক্ষা করুন
। । । । । -আর = রেজেক্স
। । । । । home / শেল দ্বারা / বাড়ী / ব্যবহারকারী (যখন ~ / উদ্ধৃতিতে নেই) এ প্রসারিত হবে
। । । । । '\' (বাস্কস্ল্যাশ + স্পেস; কোনও উদ্ধৃতি) একটি আক্ষরিক স্থান (শেল প্রসার এড়াতে)। আপনি স্ট্রিংটি উদ্ধৃতিতে রাখতে পারেন তবে উদ্ধৃতিগুলির বাইরে ~ / রেখে যেতে ভুলবেন না : ~/my\ regexবা-/"my regex"

যেমন। locate -ir ~/".*"la\ bella\ vitaহিসাবে একই locate -ir ~/".*la bella vita"এবং কোথাও ঘটতে পারে "লা বেলা ভিটা" এর জন্য আপনার পুরো হোম ডিরেক্টরি অনুসন্ধান করবে।

আপনি অনুসন্ধানটি কেবল ফাইলের নামের মধ্যে সীমাবদ্ধ করতে পারেন তবে -bবা --basename.. ব্যবহার করে সেক্ষেত্রে রেজেক্স শুরু-লাইনটি ^কেবলমাত্র বেসনামের সাথে প্রযোজ্য ...

আমি নিজেকে সাধারণত ব্যবহার করে দেখতে পাই locate -bir

PS .. Locateএত দ্রুত, যে আমি কখনও ব্যবহার করিনিfind ... বা আমি নটিলাস অনুসন্ধানও ব্যবহার করিনি (খুব ধীর)

'চিহ্নিত করুন' এর সাহায্যে, আপনি যদি নতুন যুক্ত হওয়া কোনও সন্ধান করছেন, sudo updatedbসন্ধানের ডেটাবেসটি রিফ্রেশ করার জন্য কেবল চালান ... (তবে আপনি যদি নতুনভাবে এটি যুক্ত করেছেন তবে সম্ভবত আপনি এটি জানেন যে এটি কোথায়:) ....


13

এটিকে গ্রেপের মাধ্যমে পাইপ করুন

$ locate less | grep ^/bin
/bin/bzless
/bin/less
/bin/lessecho
/bin/lessfile
/bin/lesskey
/bin/lesspipe
/bin/zless

সম্পাদনা করুন: অন্য উত্তরটি আরও ভাল, আমি জানতাম না যে আপনি সনাক্ত করার জন্য কোনও প্যাটার্ন পাস করতে পারেন।


@ অ্যাডাম .. আপনার পদ্ধতিটিকে অবমূল্যায়ন করবেন না; এটি বেশ ঠিক আছে, তবে আপনি গ্রেপে পাইপিংয়ের পরিবর্তে সনাক্তকরণের নিজস্ব রেজেক্স ব্যবহার করতে পারেন .. আপনি যে "অন্যান্য" পদ্ধতিটি উল্লেখ করেছেন তা রেগেক্স ব্যবহার করে না এবং বেশ আলাদাভাবে আচরণ করে .... আমি আমার সাথে পার্থক্য সম্পর্কে কিছু বিশদ যুক্ত করেছি উত্তর ...
পিটার.ও

2
কম সনাক্ত | গ্রেপ ^ / বিনটি সনাক্তকরণ
মার্সেল

@ মার্সেলওয়াল্ডেজ ওরোজকো "শব্দের জন্য দক্ষ অনুসন্ধান" কী এবং এটি কেন রেগেক্সের চেয়ে দ্রুত?
ফ্ল্যাশরনার

@ ফ্ল্যাশরুনার কারণ যখন আপনি এটিকে একটি রেজিেক্স অনুসন্ধান ব্যতীত locateকোনও O(log(n))অনুসন্ধান করেন locatedbতখন আপনি ইতিমধ্যে হ্রাসকৃত সাব-ফলাফলগুলিতে অনুসন্ধান grepচালাতে 'রেজেক্স' ব্যবহার করতে পারেন O(m)। (এন = locatedb[আপনার ড্রাইভের সমস্ত ফাইলের মধ্যে মোট প্রবেশের সংখ্যা ], m = # এন্ট্রিগুলির সাথে আপনার কম মেলে locatedb), মোট চলমান জটিলতা: O(log(n)) + O(m)যেখানে এম গড়ে গড়ে থাকে log(n), সুতরাং আপনি যখন সম্পাদন করবেন তার 2*O(log(n))বিপরীতে O(n)সমস্ত এন্ট্রি উপর একটি রেজেক্স ক্যোয়ারী locatedb
মার্সেল ভালদেজ ওরোজকো

@ মার্সেলওয়াল্ডেজ ওরোজকো কিন্তু রেবেক্স অনুসন্ধান করার সময় কেন ডিবি-র উপরে নন-রেজেক্স অনুসন্ধান করা O(log(n))হচ্ছে O(n)? ডিবিতে প্রবেশের পরিমাণ প্রতিটি ক্ষেত্রে একই। আমার ধারণা এটি অনুসন্ধানের অ্যালগরিদম?
ফ্ল্যাশরনার

8

আপনি ব্যবহার করতে পারেন locate /rootpath/*filenamespec.আমি এর আগে চেষ্টা করে দেখিনি, তবে এটি কাজ করে বলে মনে হচ্ছে। আপনার উদাহরণটি করতে, এটি হবেlocate /home/tim/science/*math*

আপনি এই ধরণের আচরণের findচেয়ে কমান্ডটি দেখতে চাইতে পারেন locate। বাক্য গঠন হবে find rootforsearch -name filenamepattern -print। এই ক্ষেত্রে, আপনার উদাহরণটির প্রয়োজন হবে find /home/tim/science -name *math* -printsearch অনুসন্ধান করার মতো কোনও ডাটাবেস নেই যত তাড়াতাড়ি চিহ্নিত করা সম্ভব নয় ... এটি আসলে ফাইল সিস্টেমটি অনুসন্ধান করে। মুদ্রণ ব্যতীত আপনি অন্যান্য বিকল্পগুলিও ব্যবহার করতে পারেন, যদি আপনি ফাইলটি আসলে কিছু করতে চান।


এটি locateনিজেরাই সেরা উত্তর হিসাবে এটি নিজেই ব্যবহার করে (যেমন অন্য কোনও ইউটিলিটির প্রয়োজন হয় না grep) এবং রিজেক্সপস ছাড়াই করে (যা দুর্দান্ত তবে এই ক্ষেত্রে অপ্রয়োজনীয়)।
টম

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

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