এর নাম এবং আংশিক পথ দিয়ে আমি কীভাবে কোনও ফাইল অনুসন্ধান করতে পারি?


64

প্রায়শই আমার একটি ফাইলের নাম থাকে এবং এটি আংশিক পথ, যেমন "সামগ্রী / ডক্স / ফাইল.এক্সএমএল"।

ডিরেক্টরি নাম এবং ফাইলের নাম পৃথক পৃথকভাবে সরবরাহ করার জন্য ম্যানুয়ালি এর নামটি ভাগ না করে that ফাইলটি অনুসন্ধান করার কী সহজ উপায় আছে?

এটি যদি দুর্দান্তভাবে findকাজ করা হত তবে আমি দৌড়াতে পারতাম find content/docs/file.xml, তবে দুর্ভাগ্যক্রমে এটি হয় না।


1
আপনি শুরুতে একটি * ওয়াইল্ডকার্ড যুক্ত করার চেষ্টা করতে পারেন। find -path *content/docs/file.xmlআমার জন্য কাজ।
বব

ধন্যবাদ, @ Bob, এটি সত্যিই আমার পক্ষে কাজ করেছে। বিটিডব্লিউ, আকর্ষণীয়, আমি যদি একটি নক্ষত্রের পরে স্ল্যাশ যুক্ত করি: "সন্ধান করুন -পথ * / বিষয়বস্তু / ডক্স / ফাইল.এক্সএমএল", এটি কার্যকর হয় না। যাইহোক অনেক ধন্যবাদ।

এছাড়াও, @ Bob, দয়া করে এটি একটি উত্তর হিসাবে তৈরি করুন এবং আমি এটিকে সঠিক হিসাবে চিহ্নিত করব।

অ্যাসিটার্কের পরে স্ল্যাশটি কাজ না করার কারণটি সম্ভবত নক্ষত্রটি পালানো উচিত ছিল, আমার উত্তরের সম্পাদনা দেখুন।
বব

উত্তর:


72

কোনও কিছুর* জন্য কোনও ম্যাচ ইঙ্গিত করতে একটি ওয়াইল্ডকার্ডে প্রবেশ করুন । আপনার এগুলি থেকেও পালাতে হবে *, যেমন:

find . -path \*content/docs/file.xml

বা উদ্ধৃতিতে প্যাটার্নটি আবদ্ধ করুন, যেমন:

find . -path "*content/docs/file.xml"

ম্যান পেজ যেমন এটি বর্ণনা করে:

আমি খুঁজে। -নেম * .সি -প্রিন্ট

সন্ধান করুন: পাথের অবশ্যই প্রকাশের আগে হতে হবে

এটি ঘটে কারণ শেল দ্বারা * .c প্রসারিত করা হয়েছে যার ফলস্বরূপ আসলে কমান্ড লাইনটি পাওয়া যায়:

খুঁজে। -বিগ্রামাম বিরামরাম কোড কোড

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

আমি খুঁজে। -নাম \ *। সি-প্রিন্ট


10

সন্ধানের একটি-সম্পূর্ণ বিকল্প রয়েছে find $top_dir -wholename *string*

find /usr -wholename *in/abiw*

>/usr/bin/abiword

আমি পুরো পথটি জানি না, কেবলমাত্র আংশিক, সুতরাং "-Hollename" কাজ করবে না।

পতাকাটি বিভ্রান্ত করছে, আমার উদাহরণটি দেখুন ... এটি যদি আপনি জানেন তবে এটি কেবল স্ট্রিংটিকে ডিরেক্টরিতে প্রসারিত করতে দেয়
টেকনোসরাস

3
find . -type f | grep "content/docs/file.xml"

বা শুধু

locate content/docs/file.xml

সনাক্ত করা একটি আকর্ষণীয় বিকল্প, তবে এটি পুরো ডিস্কটি অনুসন্ধান করে, আমি বেস অনুসন্ধান ডিরেক্টরি নির্দিষ্ট করতে বা কমপক্ষে প্যারাম ব্যবহার করে নির্দিষ্ট করার মতো ক্ষমতা অর্জন করতে চাই, যে ডিরেক্টরিটি এই ডিরেক্টরি থেকে তৈরি করা উচিত (যেমন আপনার প্রথম বিকল্পটি করে) মূল থেকে নয়

1
@ ব্যবহারকারী 69৯8১ - - বিপরীতে, ডিস্কটি অনুসন্ধান করে না, এটি একটি অবস্থান সনাক্তকারী ডেটাবেসকে জিজ্ঞাসাবাদ করে, যা সাধারণত দিনে একবার ক্রোনের মাধ্যমে জনবহুল হয়।
Tink

1

উদাহরণস্বরূপ asterisk / ওয়াইল্ডকার্ড ( *) ব্যবহার করে কোনও স্থানে ফাইলগুলি অনুসন্ধান করা: dir=“/apps/*/instance01/" আপনি খুঁজে পেতে পারেন ${dir} -name “*.jks”। এই জাতীয় ফাইলগুলিকে এইভাবে অ্যারেতে রাখা:

arr=(`find ${dir} -name “*.jks"`)

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

-name "*.keystore" -o -name "*.jks" -o -name “*.p12" কারণ -nameকেবলমাত্র একক স্ট্রিং গ্রহণ করে তাই 'বা' ব্যবহার করুন।

অবশেষে সবকিছুকে অ্যারেতে রাখুন:

arr=(`find ${dir} -name "*.keystore" -o -name "*.jks" -o -name "*.p12"`)

আপনার যদি পুরো পাথ থাকে তবে আংশিক পাথগুলি এ জাতীয় অ্যারেগুলিতে রাখা এত সহজ নয়:

arr=(“/Users/ajay/Documents/keystore_and_p12files/"*.{keystore,p12,jks})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.