উত্তর:
আপডেট : এর আরগস সনাক্ত করার সাথে সাথে শেলের ফাইলের নাম বিস্তৃত করার জন্য সনাক্তকরণের রেজেক্স বিকল্পটি ব্যবহার করার বিষয়ে একটি নোট ...
ফাইল ফাইলটি ব্যয় করুন
যখন আপনি টাইপ করুন locate /bin/b*
(নোট নেই যে কোনও উদ্ধৃতি নেই), বেশ কয়েকটি জিনিস ঘটে।
locate
অনেকগুলি স্বতন্ত্র কমান্ডলাইন আর্গগুলিতে দেওয়া হয়েছে। locate
তারপরে এর ডাটাবেসের প্রতিটি ফাইলের বিপরীতে এই আরগগুলির প্রত্যেকটি পরীক্ষা করে এবং ফলাফলগুলি ম্যাচ করে। তবে খেয়াল রাখুন যে 'সনাক্তকরণ' এর বর্তমান ওয়ার্কিং ডিরেক্টরি সম্পর্কে কোনও ধারণা নেই। এটি কেবলমাত্র তার ডাটাবেসে সম্পূর্ণ-যোগ্য ফাইল-নামের বিরুদ্ধে আপনার আরগগুলির সাথে মেলে ।
এর অর্থ এটি উভয়ের সাথে মিলবে /bin/bash
এবং /home/user/bin/brackets
আপনার কিছুটা নিয়ন্ত্রণ রয়েছে এইভাবে, তবে সনাক্তকরণের রেজেক্স অনুসন্ধান আরও প্রস্তাব দেয়; যেমন সনাক্ত অন্যান্য বিকল্পের অন্যান্য।
লোক্টের রেগেক্স বিকল্প
যখন আপনি টাইপ করেন তখন সাধারণ আরগগুলিরlocate -r "/bin/b.*"
চেয়ে ভিন্ন কিছু ঘটে .. ( শেল-প্রসারিত-আরোগুলি কেবল সহজ অর্গগুলির একটি তালিকা)
-r
বিকল্প বলে সনাক্ত একটি Regex প্যাটার্ন হিসাবে আপনার ARG চিকিত্সা। locate -r "^/bin/b.*"
ফাইল ফাইলের নাম / বিন / বি দিয়ে শুরু করে ... উদাহরণস্বরূপ। locate -r ~/"bin/b.*"
ফাইল নাম / home / ব্যবহারকারী / বিন / বি দিয়ে শুরু করে .. নোট করুন যে ~ / "" উদ্ধৃতি-চিহ্নগুলি "দ্বারা সুরক্ষিত নয় এবং তাই শেল টিলড-প্রসারণের সাপেক্ষে যা ~ / ঘরে / ঘরে / ব্যবহারকারী / রূপান্তর করে সংক্ষিপ্তসার: "শেল ফিলামনাম এক্সপেনশন" 'রেজেক্স' থেকে বেশ আলাদা
এখন মূল পোস্টে ফিরে:
locate
সাধারণত পুরো ডাটাবেসকে স্টডআউটে তালিকাবদ্ধ করে, তাই এটি নির্দিষ্ট ডিরেক্টরিতে সীমাবদ্ধ করার জন্য আপনাকে এটি ফিল্টার করতে হবে ... আপনি সনাক্তকরণের বিকল্পগুলির মাধ্যমে এটি করতে পারেন।
আপনি কেবল শেল-গ্লোব্বিংয়ের পরিবর্তে সনাক্তকরণের রেজেক্স ক্ষমতাটি ব্যবহার করতে পারেন ... ( locate /dir/myfile*
শেল-গ্লোব্বিং) ...
থেকে তথ্য সনাক্ত : -r
,--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
সন্ধানের ডেটাবেসটি রিফ্রেশ করার জন্য কেবল চালান ... (তবে আপনি যদি নতুনভাবে এটি যুক্ত করেছেন তবে সম্ভবত আপনি এটি জানেন যে এটি কোথায়:) ....
এটিকে গ্রেপের মাধ্যমে পাইপ করুন
$ locate less | grep ^/bin
/bin/bzless
/bin/less
/bin/lessecho
/bin/lessfile
/bin/lesskey
/bin/lesspipe
/bin/zless
সম্পাদনা করুন: অন্য উত্তরটি আরও ভাল, আমি জানতাম না যে আপনি সনাক্ত করার জন্য কোনও প্যাটার্ন পাস করতে পারেন।
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)
? ডিবিতে প্রবেশের পরিমাণ প্রতিটি ক্ষেত্রে একই। আমার ধারণা এটি অনুসন্ধানের অ্যালগরিদম?
আপনি ব্যবহার করতে পারেন locate /rootpath/*filenamespec
.আমি এর আগে চেষ্টা করে দেখিনি, তবে এটি কাজ করে বলে মনে হচ্ছে। আপনার উদাহরণটি করতে, এটি হবেlocate /home/tim/science/*math*
আপনি এই ধরণের আচরণের find
চেয়ে কমান্ডটি দেখতে চাইতে পারেন locate
। বাক্য গঠন হবে find rootforsearch -name filenamepattern -print
। এই ক্ষেত্রে, আপনার উদাহরণটির প্রয়োজন হবে find /home/tim/science -name *math* -print
search অনুসন্ধান করার মতো কোনও ডাটাবেস নেই যত তাড়াতাড়ি চিহ্নিত করা সম্ভব নয় ... এটি আসলে ফাইল সিস্টেমটি অনুসন্ধান করে। মুদ্রণ ব্যতীত আপনি অন্যান্য বিকল্পগুলিও ব্যবহার করতে পারেন, যদি আপনি ফাইলটি আসলে কিছু করতে চান।
locate
নিজেরাই সেরা উত্তর হিসাবে এটি নিজেই ব্যবহার করে (যেমন অন্য কোনও ইউটিলিটির প্রয়োজন হয় না grep
) এবং রিজেক্সপস ছাড়াই করে (যা দুর্দান্ত তবে এই ক্ষেত্রে অপ্রয়োজনীয়)।
আমার জন্য সবচেয়ে সুবিধাজনক
cd /home/tim/science
locate math | grep `pwd`