কমান্ড লাইন থেকে ফাইল সিস্টেমে কীভাবে একটি ফাইল সন্ধান করবেন?


10

আমি ফাইল সিস্টেমে কোনও ফাইল (আংশিকভাবে পরিচিত ফাইলের নাম সহ) খুঁজে পেতে চাই। আমি জিআইআই ইউটিলিটি ব্যবহার না করে কমান্ড লাইন থেকে এটি কীভাবে করব তা জানতে চাই।

উইন্ডোজে, আমি নিম্নলিখিতগুলি চালিত করব:

cd /d C:\
dir *filename* /s

লিনাক্স সমতুল্য কি?


ঠিক আছে, এই বিড়ালটিকে ত্বকে নেওয়ার একাধিক উপায় রয়েছে । আমি এখনও জানতে আগ্রহী যে এটি করার কোনও উপায় আছে কিনা ls?
ইসজি

উত্তর:


13
locate filename
find -name '*filename*'
echo **/*filename*
ls -ld **/*filename*

(মূল শর্তাবলী পড়ুন। সূক্ষ্ম মুদ্রণের জন্য ম্যানুয়ালটি পড়ুন))

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

এর ডিফল্ট মোড lsহ'ল আপনি যখন এটি একটি ডিরেক্টরি পাস করেন তখন এটি সেই ডিরেক্টরিতে ফাইলগুলি তালিকাভুক্ত করে। আপনি যদি এটিকে অন্য কোনও ধরণের ফাইল (নিয়মিত ফাইল, প্রতীকী লিঙ্ক, ইত্যাদি) পাস করেন তবে এটি কেবলমাত্র সেই ফাইলটিকেই তালিকাবদ্ধ করে। (এটি প্রতিটি তর্ককে পৃথকভাবে প্রযোজ্য)) বিকল্পটি কখনই কোনও ডিরেক্টরিতে না নেওয়ার -dকথা বলে ls

ls-Rডিরেক্টরিগুলির পুনরাবৃত্তিতে তালিকাবদ্ধ করতে এটির একটি বিকল্প রয়েছে । তবে এটি সীমিত প্রয়োগযোগ্যতার, এবং আউটপুটটিতে বেশি ফিল্টারিংয়ের অনুমতি দেয় না।

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

echo *filename*

Ditionতিহ্যগতভাবে, ওয়াইল্ডকার্ডগুলি বর্তমান ডিরেক্টরিতে সীমাবদ্ধ ছিল (বা নির্দেশিত ডিরেক্টরি echo /some/where/*filename*:)। একটি *ফাইলের নামের সাথে বা ফাইলের নামের কোনও অংশের সাথে *.txtমেলে তবে মিলবে না foo/bar.txt। আধুনিক শেলগুলি প্যাটার্নটি যুক্ত করেছে **/যার অর্থ "এই ডিরেক্টরিতে বা এর নীচে যে কোনও ডিরেক্টরিতে (পুনরাবৃত্তি)" means বাশ সহ, historicalতিহাসিক সামঞ্জস্যতার কারণে, এই বৈশিষ্ট্যটি স্পষ্টভাবে সক্ষম করা দরকার shopt -s globstar(আপনি এই লাইনটি আপনারটিতে রাখতে পারেন ~/.bashrc)।

echo **/*filename*

echoকমান্ড শুধু তোমার দিকে শেল ফিরে দ্বারা উত্পন্ন ফাইলের নাম তালিকা প্রতিধ্বনি। ব্যতিক্রম হিসাবে, যদি কোনও মিলিয়ে ফাইলের নাম না থাকে তবে ওয়াইল্ডকার্ড প্যাটার্নটি ব্যাশে অপরিবর্তিত রেখে দেওয়া হয়েছে (যদি আপনি সেট না করেন তবে shopt -s nullglobপ্যাটার্নটি খালি তালিকায় প্রসারিত হয়) এবং zsh একটি ত্রুটি সংকেত দেয় (যদি না আপনি সেট করেন setopt nullglob, বা setopt no_no_matchযা প্যাটার্নটি অপরিবর্তিত রেখে দেয়)।

আপনি এখনও lsতার বিকল্পগুলির জন্য ব্যবহার করতে চাইতে পারেন । উদাহরণস্বরূপ, lsরঙের মাধ্যমে ফাইলের (ডিরেক্টরি, এক্সিকিউটেবল, ইত্যাদি) প্রকৃতি বা অনুমতি সম্পর্কে ইঙ্গিত দিতে পারেন। আপনি ফাইলটির তারিখ, আকার এবং এর সাথে মালিকানা প্রদর্শন করতে চাইতে পারেন ls -l। আরও অনেক বিকল্পের জন্য ম্যানুয়ালটি দেখুন।

ডিরেক্টরি ট্রিতে একটি ফাইল সন্ধানের জন্য traditionalতিহ্যবাহী কমান্ড find। কোন ফাইলগুলি প্রদর্শিত হবে এবং সেগুলি দিয়ে কী করণীয় তা নিয়ন্ত্রণ করার জন্য এটি অনেক বিকল্পের সাথে আসে। উদাহরণস্বরূপ, *filename*বর্তমান ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলির নামগুলির সাথে মেলে এমন নামগুলির সাথে ফাইলগুলি সন্ধান এবং তাদের নাম মুদ্রণ:

find /some/dir -name '*filename*' -print

-printএকটি ক্রিয়া (বেশিরভাগ অন্যান্য ক্রিয়াগুলি ফাইলের একটি কমান্ড প্রয়োগ করে); যদি আপনি কোনও পদক্ষেপ না রাখেন -printতবে নিহিত থাকে। এছাড়াও, যদি আপনি কোনও ডিরেক্টরিকে ট্র্যাভারস ( /some/dirউপরে) নির্দিষ্ট না করে থাকেন তবে বর্তমান ডিরেক্টরিটি অন্তর্ভুক্ত থাকবে। শর্তটি -name '*filename'কেবলমাত্র সেই ফাইলগুলির তালিকা তৈরি করতে (বা কাজ করে) বলে যার নাম সেই প্যাটার্নের সাথে মেলে; এমন আরও অনেক ফিল্টার রয়েছে, যেমন -mtime -1গত 24 ঘন্টা সংশোধিত ফাইলগুলির সাথে মেলে। আপনি মাঝে মাঝে -name '*filename*'উপরের উদ্ধৃতিগুলি বাদ দিতে পারেন তবে কেবলমাত্র যদি ওয়াইল্ডকার্ড বর্তমান ডিরেক্টরিতে কোনও ফাইলের সাথে মেলে না (উপরের দেখুন)। সব মিলিয়ে সংক্ষিপ্ত রূপটি

find -name '*filename*'

আপনি যখন জানবেন তখন অন্য একটি দরকারী সরঞ্জাম কোনও ফাইলের নাম (অংশ) locate। এই সরঞ্জামটি ফাইলের নামের একটি ডাটাবেস অনুসন্ধান করে eries সাধারণ সিস্টেমে এটি প্রতি রাতে সতেজ হয়। locateওভারের সুবিধাটি find /হ'ল এটি অনেক দ্রুত। একটি প্রতিক্রিয়া হ'ল এর তথ্যগুলি বাসি be একাধিক প্রয়োগ রয়েছে locateযার বহু-ব্যবহারকারীর সিস্টেমে তাদের আচরণের মধ্যে পার্থক্য রয়েছে: মৌলিক locateপ্রোগ্রাম সূচকগুলি কেবল সর্বজনীনভাবে পঠনযোগ্য ফাইলগুলি (আপনি updatedbআপনার অ্যাকাউন্টের সমস্ত ফাইলকে সূচক করে এমন একটি দ্বিতীয় ডাটাবেস তৈরি করতে সঙ্গীকে চালাতে চাইতে পারেন ); অন্যান্য সংস্করণ রয়েছে (এমলোকেট, স্লোক) যা সমস্ত ফাইলকে সূচক locateকরে এবং কেবলমাত্র আপনি দেখতে পাচ্ছেন এমন ফাইলগুলি ফিরিয়ে আনার জন্য প্রোগ্রামটি ডাটাবেস ফিল্টার করে।

locate filename

কখনও কখনও আপনি মনে করেন যে কোনও ফাইল আপনার ডিস্ট্রিবিউশনে একটি প্যাকেজ দ্বারা সরবরাহ করা হয়েছে, আপনি ফাইলের নামটি (অংশ) জানেন তবে আপনার প্যাকেজের নাম নয় এবং আপনি প্যাকেজটি ইনস্টল করতে চান। অনেক বিতরণ তার জন্য একটি সরঞ্জাম সরবরাহ করে। উবুন্টুতে, এটি apt-file search filename। অন্যান্য সিস্টেমে সমমানের কমান্ডের জন্য, প্যাকম্যান রোসেটা পরীক্ষা করুন ।


আশা করি আমি এটি আবারও ভোট দিতে পারতাম। আজ রাতে আরও একটি প্রকল্পের জন্য এটি সন্ধান করতে হবে। আবার ধন্যবাদ, জিিলস!
ইসজি

6

আপনার ডস উদাহরণের সমতুল্য হ'ল:

cd /
find . -name \*filename\* -print

-printযদিও লিনাক্সে আপনার আর আর্গুমেন্টের প্রয়োজন হয় না। আপনি যদি নিজেকে অন্য অপারেটিং সিস্টেমে কাজ করে দেখেন তবে এটি সম্পর্কে জানার পক্ষে সুবিধাজনক হতে পারে।


5

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

ডিফল্ট ইনস্টল (উবুন্টুতে) এ, locateএকটি দৈনিক cronকাজ সেট করে যা ফাইল সিস্টেমটি স্ক্যান করে এবং ডাটাবেস আপডেট করে ...

আপনি আপনি ডাটাবেস পরবর্তী ক্রন আপডেট সামনে আপ টু ডেট আনতে হবে যদি মনে করেন, এটা সাধারণত দ্রুত চেয়ে findবা lsশুধু চালানোর জন্য sudo updatedbএবং তারপর locate। আপনার আরও অনুসন্ধান করার প্রয়োজন থাকলে এটি অবশ্যই দ্রুততর ... এর নাম অনুসারে, updatedbডাটাবেস যা locateব্যবহার করে তা আপডেট করে ...

locateঅন্তর্নির্মিত রেজেক্স রয়েছে, যা এটি খুব সহজ করে তোলে ... আমি findএকটি স্ক্রিপ্টে ব্যবহার করব , তবে আমি findকমান্ডলাইনে খুব কমই ব্যবহার করব । এমনকি আমি locate(ব্যক্তিগত) স্ক্রিপ্টগুলিতেও ব্যবহার করি ... যেমন।locate -bir "oo.*datt.*mp4$"

locate ম্যাচ করা ফাইলগুলির সম্পূর্ণরূপে যোগ্য পাথগুলি প্রদান করে।


2
find [path] -name [filename]

উদাহরণস্বরূপ, আমি যদি foo সমেত একটি ফাইল নামের জন্য / হোম ডিরেক্টরি অনুসন্ধান করতে চাই, আমি কমান্ডটি ব্যবহার করব:

find /home -name *foo*

ফাইন্ড man findকমান্ড এবং আর্গুমেন্ট সম্পর্কে আরও তথ্যের জন্য কমান্ডটি ব্যবহার করুন ,


3
*শেলটির ব্যাখ্যা থেকে বাঁচতে আপনাকে উদ্ধৃত করা বা এড়ানোর প্রয়োজন ।
শন জে গফ

এটি কি ডিস্ট্রো / শেল নির্দিষ্ট? আমি এটিকে ফেডোরা ১ in এ চালাতে পেরেছি এবং এটি দুর্দান্ত কাজ করেছে।
জোশ-কেইন

1
কিছু শেলগুলিতে অপশন রয়েছে যা তারার সাথে প্রোগ্রামের সাথে পাস করে যদি তারা কোনও কিছুর সাথে মেলে না। আপনার বর্তমান ডিরেক্টরিতে এমন একটি ফাইল তৈরি করার চেষ্টা করুন যা সেই প্যাটার্নের সাথে মেলে এবং আবার কমান্ডটি ব্যবহার করে দেখুন।
শন জে গফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.