কোনও প্রদত্ত ডিরেক্টরিতে কেবল ফাইলগুলি কীভাবে খুঁজে পাওয়া যায় এবং ব্যাশ ব্যবহার করে উপ-ডিরেক্টরিগুলি উপেক্ষা করা যায়


129

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

আমি যে ফাইলগুলি / প্যাটার্নে আগ্রহী সেগুলি: / dev / abc- স্ক্যানার, / দেব / এবিসি নগদ ....

আদেশ:

find /dev/ -name 'abc-*'

কী ফিরিয়ে দেওয়া হচ্ছে:

/dev/abc-scanner
/dev/abc-cash
...
...
...
/dev/.udev/names/abc-scanner
/dev/.udev/names/abc-cash

আমি পরে থাকা ফাইলগুলি উপেক্ষা করতে চাই: / দেব / udeদেব / ...


9
নির্দিষ্ট সাব-ডাইরেক্টরিগুলিকে উপেক্ষা করবেন, না কোনও উপ-ডিরেক্টরিতে নামবেন না? পরবর্তীগুলির জন্য, -ম্যাক্সডেপথ 1 বিকল্পটি ব্যবহার করুন
15:59-

@ ফ্র্যাঙ্কসি একটি উত্তর হিসাবে পোস্ট করুন।
cnicutar

উত্তর:


202

আপনি যদি সন্ধানটি প্রথম স্তরের সীমাবদ্ধ করতে চান তবে আপনি করতে পারেন:

 find /dev -maxdepth 1 -name 'abc-*'

... বা আপনি যদি বিশেষভাবে .udevডিরেক্টরিটি বাদ দিতে চান তবে আপনি এটি করতে পারেন:

 find /dev -name '.udev' -prune -o -name 'abc-*' -print

যদি আমি উপরে তালিকাভুক্ত সমস্ত সিমলিংকগুলি উপরের প্যাটার্নটিতে খুঁজে পাওয়া যায় যেখানে তালিকাবদ্ধ করতে চাইতাম, আমি কি কেবল পাইপ ব্যবহার করব? সন্ধান / দেব-ম্যাক্সডেপথ 1-নাম 'abc- *' | এর মতো কিছু ls -l
15

1
xargsপরিবর্তে এটি ব্যবহার করা আরও ভাল , find /dev -maxdepth 1 -name 'abc-*' | xargs ls -lতবে এর মতো কিছু: তবে যদি নামগুলির মধ্যে তাদের সাদা অংশ থাকতে পারে এমন কোনও সুযোগ থাকে তবে আপনার করা উচিতfind /dev -maxdepth 1 -name 'abc-*' -print0 | xargs -0 ls -l
মার্ক লংগায়ার

তবে, স্টিফেন ডার্লিংটনের উত্তরটি যেমন উল্লেখ করেছে , কেন আপনি ঠিক করবেন না তা নিশ্চিত নইls -l /dev/abc-*
মার্ক লংগায়ার

এছাড়াও, আপনি যদি সিমলিংকগুলি নির্দেশ করে কোথায় তা জানতে চান, আপনি এটি করতে পারেনfor x in /dev/abc-*; do readlink -f $x; done
মার্ক লংগায়ার

1
অথবা আপনি যদি কেবল প্রথম স্তরের সাব-ডাইরেক্টরিগুলি চান, ls -l /dev/abc-* /dev/*/abc-* | fgrep -v /dev/.udev... আমার লিনাক্সে অন্তত /dev/*/*ফাইলগুলি অন্তর্ভুক্ত না করে /dev/.udev/*আপনি এটি বাদ দিতে পারেন fgrep -v
ট্রিপলি

9

আপনার কোন বিশেষ কারণ ব্যবহার করা দরকার find? আপনি কেবলমাত্র lsএকটি ডিরেক্টরিতে একটি প্যাটার্নের সাথে মেলে এমন ফাইলগুলি সন্ধান করতে ব্যবহার করতে পারেন ।

ls /dev/abc-*

আপনার যদি প্রয়োজন হয় findতবে -maxdepth 1আপনি কেবল নির্দিষ্ট ডিরেক্টরিতে প্রয়োগ করতে স্যুইচটি ব্যবহার করতে পারেন ।


আমি মনে করি এর -maxdepth 1চেয়ে আপনি বোঝাচ্ছেন-maxdepth 0
মার্ক লংগায়ার

5
এটি উল্লেখ করা উচিত যে ওয়াইল্ডকার্ড এখানে গুরুত্বপূর্ণ অংশ, না ls। একইভাবে ফাইল খুঁজে পেতে পারেন echoবা wcবা কি আপনি, আছে কারণ শেল তোমার জন্য ওয়াইল্ডকার্ড বিস্তৃতি ঘটে। তাই for file in /dev/abc-*; do something with each "$file"; doneকি ওপি আসলে জন্য খুঁজছেন হয় হতে পারে।
ট্রিপলি

1
আহ, আমি কখনই এটি কোন দিক দিয়ে মনে করতে পারি না ... সম্পাদনার জন্য ধন্যবাদ। এছাড়াও, লক্ষণীয় যে এটি সর্বজনীন নয়। সোলারিস সংস্করণটির findউদাহরণ নেই।
স্টিফেন ডার্লিংটন

@ ট্রিপলি +1 হা. শেল এ সমস্ত করা সম্ভব হলে সম্ভব হবে।
স্টিফেন ডার্লিংটন

1
@MustafaOzturk দ্য lsপ্রযোজন নেই। for f in abc*; ...আপনার যা দরকার তা হল।
স্টিফেন ডার্লিংটন

4

এটি আপনি যা করতে পারেন তা করতে পারে:

find /dev \( ! -name /dev -prune \) -type f -print

2
হ্যাঁ, এটি কাজ করে। -ম্যাক্সডেপথ কিছু পুরানো ইউনিক্স সন্ধান করার জন্য প্রয়োগ করা হয়নি।
সিসিটিও

-1
find /dev -maxdepth 1 -name 'abc-*'

আমার জন্য কাজ করে না। এটি কিছুই ফেরত না। আমি যদি শুধু করি '।' এটি আমি কাজ করছি তার নীচে ডিরেক্টরিতে সমস্ত ফাইল দেয়।

find /dev -maxdepth 1 -name "*.root" -type 'f' -size +100k -ls

'দিয়ে কিছুই ফিরিয়ে দাও না।' পরিবর্তে আমি আমার ডিরেক্টরিতে সমস্ত 'বড়' ফাইলের তালিকা এবং সেইসাথে আমি পুরানো ফাইলগুলি সংরক্ষণ করি সেই রুট ফাইলগুলি / ডিরেক্টরিতে পাই।

চালিয়ে যান। এইটা কাজ করে.

find ./ -maxdepth 1 -name "*.root" -type 'f' -size +100k -ls
564751   71 -rw-r--r--   1 snyder   bfactory   115739 May 21 12:39 ./R24eTightPiPi771052-55.root
565197  105 -rw-r--r--   1 snyder   bfactory   150719 May 21 14:27 ./R24eTightPiPi771106-2.root
565023   94 -rw-r--r--   1 snyder   bfactory   134180 May 21 12:59 ./R24eTightPiPi77999-109.root
719678   82 -rw-r--r--   1 snyder   bfactory   121149 May 21 12:42 ./R24eTightPiPi771098-10.root
564029  140 -rw-r--r--   1 snyder   bfactory   170181 May 21 14:14 ./combo77v.root

স্পষ্টতই /dev হ'ল আগ্রহের ডিরেক্টরি । তবে ./দরকার, শুধু নয় .। কম বেশি /কী /devবোঝাতে চাইছে তা বুঝতে পেরেও এর প্রয়োজনীয়তা স্পষ্ট ছিল না ।

আমার কোনও 'খ্যাতি' নেই বলে আমি মন্তব্য হিসাবে সাড়া দিতে পারিনি।


1
আপনি ভাল উত্তর দিয়ে খ্যাতি অর্জন। দয়া করে এই পড়া stackoverflow.com/conduct
aifrim

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