যে কোনও ডিরেক্টরি থেকে ফাইল কীভাবে সন্ধান করতে হয়


22

আমি Book1 নামক একটি ফাইল সন্ধান করার চেষ্টা করছি ।

আমার পরীক্ষায় আমি উপরোক্ত ফাইলটি অনুসন্ধান করার চেষ্টা করছি এবং এই পরীক্ষায়, আমি জানি না যে ফাইলটি কোথায় রয়েছে।

আমি চেষ্টা করেছিলাম find / -iname book1কিন্তু কোনও আউটপুট নেই।

কমান্ড লাইনটি ব্যবহার করে আমার ফাইলটি book1 নামক ফাইলটি কীভাবে খুঁজে পাব যদি আমি জানিনা যে ফাইলটি কোথায় রয়েছে?

সম্পাদনা করুন:

আমার পরিস্থিতি নীচে আরও বিশদে বর্ণনা করা হয়েছে:

  1. ফাইল এক্সটেনশন অজানা
  2. সঠিক নাম (অর্থাত্ বড় বড় অক্ষর, সংখ্যা ইত্যাদি) অজানা
  3. ফাইলটির অবস্থান অজানা

2
যদি কোনও ফাইল বলা হয় Book1, এবং এটি কোনও ডিরেক্টরিতে পড়ে আপনি পড়তে পারেন তবে find / -iname book1তা এটি খুঁজে পাবেন। আপনি কি নিশ্চিত যে এটি আসলে Book1, এবং না Book1.xyz?
ফক্স

ফাইলটির পুরো নাম Book1.gnumeric। আপনি কি বলছেন যে আমাকে ফাইলটির পুরো নামটি নির্দিষ্ট করতে হবে? কিছু কারণে আমি ভেবেছিলাম, এই নির্দিষ্ট কমান্ডের জন্য, আমার যা দরকার তা হ'ল ফাইলটির সাধারণ নাম। আমার পরীক্ষাটি কোনও ফাইল সন্ধানের চেষ্টা করছে যদি উদাহরণস্বরূপ, আমি ফাইলের বর্ধিতাংশ মনে রাখি না এবং কেবলমাত্র এক ধরণের ফাইলটিই খুঁজছি যা আমি সন্ধান করছি। দয়া করে উপদেশ দাও.
Aspire27

@ don_crissti সম্পন্ন হয়েছে। উপরে সম্পাদনা দেখুন।
Aspire27

আপনি মিশ্রিত find এবং locatelocateউদার, এবং যতক্ষণ না এটি তার ডেটাবেজে থাকে ততক্ষণ যা কিছু মিলবে তা খুঁজে পাবে যা সাধারণত প্রতিদিন আপডেট হয়। findএই ক্ষেত্রে, কোনও ফাইল গ্লোব খুঁজছেন, আপনি যে ধরণের ধরণ ব্যবহার করবেন ls। আপনি সম্ভবত বলতে চাইছেন iname '*book1*'। নোট করুন যে শেলটিটি দেখার আগে এটি শেলটিকে প্রসারিত হতে আটকাতে প্যাটার্নটি অবশ্যই কোটের ভিতরে থাকতে findহবে। আরও খেয়াল করুন যে find, অনেক * নিক্স কমান্ডের মতো, যখন এটি ব্যর্থ হয় তখন হতাশাজনকভাবে চুপ থাকে।
মানঙ্গো

উত্তর:


31

প্রথমত, একটি যুক্তি -inameহ'ল শেল প্যাটার্ন । আপনি বাশ ম্যানুয়ালটিতে নিদর্শনগুলি সম্পর্কে আরও পড়তে পারেন । সারকথা, যাতে হয় findআসলে করার এটি একটি ফাইল ফাইলের নাম উল্লেখ করা প্যাটার্ন মিলতে হবে। কেস-সংবেদনশীল স্ট্রিং book1ম্যাচ তৈরি Book1.gnumericকরতে আপনাকে হয় যোগ করতে হয় *তাই এটি দেখতে এটির মতো দেখাচ্ছে:

find / -iname 'book1*'

বা পুরো নাম নির্দিষ্ট করুন:

find / -iname 'Book1.gnumeric'

দ্বিতীয়ত, -inameকরতে হবে findফাইলের নাম যদি তাই উপেক্ষা যদি আপনাকে তা নির্দিষ্ট -iname book1এটি পেতে পারে Book1, bOok1আপনি কি নিশ্চিতরূপে ফাইল আপনার জন্য বলা হয় খুঁজছেন হন, তাহলে ইত্যাদি Book1.gnumeric তারপর ব্যবহার করবেন না -inameকিন্তু -name, এটি দ্রুত হবে:

find / -name 'Book1.gnumeric'

তৃতীয়ত, অন্য উত্তরে যেমনটি বলা হয়েছে তেমন প্যাটার্নটি উদ্ধৃত করার বিষয়ে মনে রাখবেন ।

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

সম্পাদনা :

আমি লক্ষ্য করেছি যে আপনি আপনার প্রশ্ন সম্পাদনা করেছেন। আপনি যদি পুরো ফাইলের নাম, মূলধন এবং অবস্থান জানেন না তবে আপনার অবশ্যই এই জাতীয় কিছু ব্যবহার করা উচিত:

find / -iname 'book1*'

আমি অন্য 2>/dev/nullসমস্ত *permission denied*ত্রুটিগুলি লুকানোর জন্য লাইনের শেষ প্রান্তে রাখার পরামর্শ দিচ্ছি যা যদি আপনি findঅ-রুট ব্যবহারকারী হিসাবে প্রার্থনা করেন তবে উপস্থিত থাকবে :

find / -iname 'book1*' 2>/dev/null

এবং যদি আপনি নিশ্চিত হন যে আপনি একটি একক ফাইল সন্ধান করছেন, এবং আপনার সিস্টেমে কেবলমাত্র একটি একক ফাইল রয়েছে findযা প্রথম মেলানো ফাইলটি সন্ধানের পরে বেরিয়ে আসতে বলতে পারেন সেই মানদণ্ডের সাথে মেলে :

find / -iname 'book1*' -print -quit 2>/dev/null


6

আপনি locateকমান্ড চেষ্টা করতে পারেন । এটি অনুসন্ধানকে ত্বরান্বিত করার জন্য ফাইলনামগুলির একটি ডাটাবেস ব্যবহার করে।

সমস্ত ফাইলের মিল খুঁজে পাওয়া *book1*এবং কেস উপেক্ষা করার জন্য, আপনি ব্যবহার করতে পারেন

locate -i book1

যদি আপনি অনুসন্ধান করতে চান ফাইল শুরু সঙ্গে book1আপনি ওয়াইল্ডকার্ড নিজেকে করতে হবে:

locate -i 'book1*'

এটি এর চেয়ে অনেক দ্রুত find, তবে শেষবারের মতো ডাটাবেস রিফ্রেশ হয়েছিল।


5

আপনি যদি জানেন যে আপনার কাছে একটি ফাইল রয়েছে book1.something, যেখানে ফাইলের অবস্থান, সঠিক মান এবং ফাইলটির somethingমূলধন প্যাটার্ন সবই অজানা:

find / -iname 'book1.*'

যদি আপনি নিশ্চিতভাবে জানেন যে সমস্ত ফাইল নামটিতে শব্দটি রয়েছে তবে bookআপনি এটির সাথে একটি বৃহত্তর তালিকা তৈরি করতে পারেন

find / -iname '*book*'

যুক্তিটি -nameহ'ল শেল গ্লোব প্যাটার্ন। ডিরেক্টরিটি ফাইলটিতে রয়েছে, তুলনা করুন:

$ ls Book1
ls: cannot access 'Book1': No such file or directory
$ ls Book1.*
Book1.gnumeric

এটি দ্বারা সম্পাদিত প্রকারের প্রতিনিধিত্ব করে -name-inameবিকল্প কেবল এই একটি কেস-অবশ সংস্করণ পারেন।


1

POSIXly,

LC_ALL=C find / -name '*[bB][oO][oO][kK]1*'

যার নাম ধারণ করে সব ফাইল পাথ রিপোর্ট হবে book1(কেস কোন প্রকরণ সঙ্গে, কিন্তু শুধুমাত্র হওয়া ASCII ল্যাটিন অক্ষর বিবেচনা করা bokBOKমত ইউনিকোড মধ্যে, না অন্য অনেক বৈচিত্র 𝗄, 𝚔, 𝘬, , , , ডায়াক্রিটিক সহ সব তাদের বৈচিত্র ...) মধ্যে আপনি যে ডিরেক্টরিতে অ্যাক্সেস পেয়েছেন সেগুলি।


0

এই ধরণের কাজের জন্য আমি সর্বদা করি: find / -iregex '.*Book1.*'

এই ফর্মটি আপনার দৃশ্যের 3 টি পয়েন্টের যত্ন নেবে ( iregexএটি একটি ক্ষেত্রে সংবেদনশীল যৌক্তিক অভিব্যক্তি, এবং .*উভয় পক্ষের প্যাটার্নটি আপনার বুক 1 এর নির্দিষ্ট প্যাটার্নের আগে এবং পরে কোনও চরিত্রের সাথে মিলবে - এটি সম্ভবত আপনাকে প্রয়োজনের তুলনায় আরও বেশি ফলাফল দিতে পারে) তবে আপনি অবশ্যই ফাইলটি মিস করবেন না)

মূল পার্থক্য: সম্ভব হলে শুধু ব্যবহার করে বেশি নিয়ন্ত্রণমূলক হতে /, শুধুমাত্র চেষ্টা /home, অথবা অন্যথায় আপনি কিছু ডিরেক্টরি প্রাসঙ্গিক নয় এমন নেমে পাবেন ( /sys, /dev, ইত্যাদি ...)

তবে মনে রাখবেন যে ইউনিক্স অনুমতিগুলি প্রযোজ্য: ফাইলটি যদি কোনও ডিরেক্টরিতে থাকে যার জন্য findকমান্ডটি ব্যবহার করা ব্যবহারকারীটির কোনও অ্যাক্সেস (এক্সিকিউট) নেই, findসেখানে এটি সন্ধান করতে পারবেন না।


সোলারিস (ওএস নির্দিষ্ট করা হয়নি) (এবং সম্ভবত * বিএসডি) এর মতো জায়গায় কাজ করবে না, এটি একটি জিএনইউ এক্সটেনশন এবং মানেরfind
জার্ট ভ্যান ড্যান বার্গ

0

ফাইল এবং বিষয়বস্তু সন্ধানের জন্য সিলভার অনুসন্ধানকারী একটি খুব দ্রুত এবং সহজ ব্যবহার।

আপনার সমস্যা সমাধানের জন্য সিলভার সন্ধানকারী কমান্ডটি দেখতে এমন হবে ...

ag -g Book1

-g PATTERN PATTERN এর সাথে মিলে যাওয়া ফাইলের নাম মুদ্রণ করুন


0

locate এবং এর রূপগুলি একটি দ্রুত পদ্ধতি হতে থাকে।

# updatedb # run as root, possibly using sudo, e.g. sudo -b updatedb. If file is on the system for more than a day it should already be in the index and this can be skipped
$ locate -i book1

যদি অবস্থান উপলব্ধ না হয় তবে আপনি findপরিবর্তে ব্যবহার করতে পারেন । এটি অনেক ধীর হতে পারে, তবে আরও অনেক সুনির্দিষ্ট।

আপনার যদি একটি একক পার্টিশন থাকে: (আপনার ব্যবহারকারী যদি ফাইলে অ্যাক্সেস না পান তবে রুট হিসাবে চালান)

$ find / -xdev -iname 'book1*' -print # If the iname extension to find is available
$ find / -xdev -print | grep -F -i /book1 # if iname is not available

আপনি যদি -xdev findঅন্যান্য পার্টিশনে যেমন অনুসন্ধানগুলি অন্তর্ভুক্ত না করেন , যেমন /procএবং /sys, যা ত্রুটিগুলি সহ আপনার পর্দা প্লাবিত করে, বিশেষত আপনি যদি রুট না হন। ( 2> /dev/nullঅনুসন্ধান কমান্ডের শেষে যুক্ত করে ত্রুটিগুলি আড়াল করা যায় (মন্তব্যটি সরানো উচিত))

আপনার যদি একাধিক পার্টিশন থাকে এবং আপনি জানেন না যে ফাইলটি কোনটির উপর রয়েছে, আপনি একটি তালিকা নিয়ে lsblk(লিনাক্স-ভিত্তিক ওএসে, পার্সিং dfআউটপুট অন্যথায় একটি বিকল্প) পেতে পারেন এবং এটি খুঁজে বার করতে পারেন: (আপনি যদি আবার শিকড় করেন তবে আপনি ফাইলটি অ্যাক্সেস করতে পারবেন কিনা তা জানেন না)

$ find $(lsblk -O MOUNTPOINT -n | grep -F /) -xdev -iname 'book1*' -print # GNU-based OSes
$ find $(df -P|awk '$1 ~ /^\/dev/ {print $NF}') -xdev | grep -F -i book1 # Non-GNU based OSes.

(আপনার মাউন্টপয়েন্টগুলিতে কোনও একটিতে ফাঁকা স্থান থাকলে এটি কিছুটা নাজুক) ( dfপ্যারামিটারগুলির মধ্যে টিউনিংয়ের প্রয়োজন হতে পারে--পি GNU কে dfমানক POSIX আউটপুট দেয় Other অন্য সংস্করণে অন্য প্যারামিটার থাকতে পারে বা এটি বাকী থাকতে পারে your আপনার ম্যান পৃষ্ঠাটি পড়ুন)

grep -Fবাদ অন্যান্য জিনিস, ফিরে swap পার্টিশন মত।

নন-জিএনইউ সংস্করণে, ডাব্লু ডিভাইসগুলি /devসত্যিকারের ফাইল সিস্টেম পেতে মাউন্ট দিয়ে শুরু করুন এবং তারপরে dfআউটপুট থেকে শেষ ক্ষেত্রটি (মাউন্টপয়েন্ট) মুদ্রণ করুন ।

এটি একটি বোর্নের মতো শেলও ধরেছে ( kshএবং bashএটি কাজ করা উচিত you আপনি যদি cshকোনও বৈকল্প ব্যবহার করছেন তবে এটি চেষ্টা করার আগে একটি স্ক্রিপ্টযোগ্য শেল শুরু করুন)


grepগুলি একটু সশব্দ হতে পারে, এটা ফিল্টার করা শিখতে ভাল (এই উদাহরণ প্রয়োজন না করা উচিত, কিন্তু যদি কিছু বেশি প্রচলিত যে জন্য লাগছিল হয়, greps টিউনিং প্রয়োজন নিচে শব্দ মাত্রা রাখার হবে)
গার্টি ভ্যান ডেন বার্গ

0

এজি (রৌপ্য অনুসন্ধানকারী) ফাইলগুলিতে খুব দ্রুত অনুসন্ধান সরবরাহ করে এবং ফাইলের নাম অনুসন্ধানের জন্য একটি বিকল্পও রয়েছে:

>: time ag -g foo # uses heuristics to only look in desired locations
apps/vxy/src/assets/tree-content-pages/tree-page-bird/foo-illustration.jpg

real    0m0.884s
user    0m0.701s
sys     0m0.178s

>: time find . -name "*foo*"
./apps/ssr/dist/static/media/foo-illustration.jpg
./apps/vxy/dist/static/media/foo-illustration.jpg
./apps/vxy/src/assets/tree-content-pages/tree-page-bird/foo-illustration.jpg

real    0m29.744s
user    0m2.108s
sys     0m13.982s

>: time ag -ug foo # searching all files is still faster and simpler to use then find command
apps/ssr/dist/static/media/foo-illustration.jpg
apps/vxy/dist/static/media/foo-illustration.jpg
apps/vxy/src/assets/tree-content-pages/tree-page-bird/foo-illustration.jpg

real    0m16.698s
user    0m1.951s
sys     0m7.119s

সুতরাং আমার ব্যবহারের ক্ষেত্রে এটি> 30 বার দ্রুত হয় যদি ফাইলটি এজি দ্বারা উপেক্ষা করা কোনও ফাইল না হয়।

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