আমি কীভাবে খুঁজে পাওয়া ডিরেক্টরিগুলিতে নেমে আসা বন্ধ করব?


24

আমি একটি নির্দিষ্ট স্ট্রিং সহ সমস্ত ডিরেক্টরি সন্ধান করতে চাই তাই এর মধ্যে থাকা ফাইলগুলিতে আমি আরও একটি অনুসন্ধান করতে পারি।

সুতরাং আমি সময় নষ্ট করতে চাই না ./my-search-term/dir/my-search-term

আমি যখন আমার প্রথম আমার সন্ধানের মেয়াদী ডিরেক্টরিটি পেয়েছি তখন কীভাবে পুনরাবৃত্তি থামানো যায়?


3
-প্রনুন দিয়ে আপনি চেষ্টা করার চেষ্টা করেছেন? ম্যান পৃষ্ঠা থেকে: "যদি ফাইলটি ডিরেক্টরি হয় তবে এটিতে নামবেন না-
লেবেশাদে

1
@ লেলেব্যাশেদ কেন আপনি একটি উত্তরে রাখেন না?
jw013

@ jw013 আমার কাছে সেই সময়ে আরও অনাদায়ী উত্তর দেওয়ার সময় ছিল না।
লেবেশাদে

উত্তর:


17

-pruneকর্ম তোলে findডিরেক্টরির মধ্যে recurse না। আপনি এটিকে অন্য ক্রিয়াকলাপের সাথে একত্রিত করতে পারেন -exec( যতক্ষণ না উভয়ভাবে কার্যকর করা হয়) এর ক্রম -pruneএবং -execকোনও বিষয় নয় -prune)।

find . -name my-search-term -prune -exec find {} … \;

নোট করুন যে কোনওটির findভিতরে বাসা বাঁধার বিষয়টি find -execকিছুটা সমস্যাযুক্ত হতে পারে: আপনি -execঅভ্যন্তরে ব্যবহার করতে পারবেন না find, কারণ টার্মিনেটরটি বাইরের দ্বারা টার্মিনেটর হিসাবে দেখা হত find। আপনি শেলটি আহ্বান করে এটিকে ঘিরে কাজ করতে পারেন তবে উদ্ধৃতি থেকে সাবধান থাকুন।

find . -name my-search-term -prune -exec sh -c '
    find "$@" … -exec … {\} +
' _ {} +

আপনার প্রথম কমান্ডের প্রথম বন্ধনীগুলি কী প্রয়োজনীয়? সত্য-prune ফিরে আসে এবং সামনে রাখা যেতে পারে । -exec
রোজিট্রিজেভিয়াচজ

@Zrocietrzewiacz না, তাদের প্রয়োজন নেই। -oসেখানে থাকার অভ্যাস , আমার ধারণা gu এবং আমার ধারণা -pruneপূর্বে -execরাখা আরও পাঠযোগ্য।
গিলস 'এস-অশুভ হওয়া বন্ধ করুন'

ধন্যবাদ, -pruneআগে বিকল্পটি ব্যবহার করে নি।
হরিদসভ

আমার ব্যবহার ক্ষেত্রে, এই কমান্ড: mkdir -p x1 x2; touch x1/x11 x1/x12 x2/x21 x2/x22; find . -name 'x1*' -exec rm -rf {} \;ত্রুটি দেয়: find: ./x1: No such file or directory। সমাধানটি হ'ল কমান্ডের -pruneশেষে যুক্ত করা find
haridsv

(1) কিছু সংখ্যার সংস্করণ findপ্রসারিত হয় {}এমনকি যখন এটি কোনও যুক্তির একটি স্ট্রিং হিসাবে উপস্থিত হয় -exec। এ জাতীয় সংস্করণটি findআপনার দ্বিতীয় কমান্ডের উপর চাপ সৃষ্টি করবে, কারণ {}অভ্যন্তরীণ findকমান্ডের (শেল কমান্ডের) বাইরের অংশে পাওয়া ডিরেক্টরিটির নাম দ্বারা প্রতিস্থাপন করা হবে find। আপনি এটি find . -name my-search-term -prune -exec sh -c 'find "$0" … -exec … "{"} +' {} \; ব্যবহার করে "{"}যা শেলটি পরিণত হবে তা বলে এটি ঠিক করতে পারেন {}। … (চালিয়ে যাওয়া)
স্কট

6

- খালি সমাধান -

যদি আপনি findসন্ধান করা ডিরেক্টরিটির বিষয়বস্তুগুলি এড়িয়ে যেতে চান তবে অন্যান্য ডিরেক্টরিতে অনুসন্ধান চালিয়ে যেতে চান , -prune@laebhade এর প্রস্তাবিত হিসাবে ব্যবহার করুন । সম্পূর্ণ কমান্ডটি এর মতো দেখতে হবে

 find . -type d -name somename -prune -exec ...

অন্যদিকে, যদি তুমি চাও findসম্পূর্ণরূপে করার অনুসন্ধানের বন্ধ এবং প্রথম ম্যাচিং ডিরেক্টরির খোঁজার পর, তাহলে কি আপনি খুঁজছেন হয় -quit(সংস্করণ থেকে পাওয়া 4.2.3এর GNU find)। এটি ব্যবহার করতে কিছুটা জটিল, কারণ এটি findঅবিলম্বে প্রস্থান করে - সুতরাং -quitঅবশ্যই কমান্ডের একেবারে শেষে স্থাপন করা উচিত:

find . -type d -name somename -exec ... -quit

এটি প্রত্যাশার মতো কাজ করার জন্য, একজনকে নিশ্চয়তা দিতে হবে যে -execরিটার্নগুলি সত্য (অন্য কথায়, একটি শূন্য স্থিতি)। আপনি যদি প্রস্থান স্থিতি -execঅবহেলা করতে চান , যাতে এটি -quitসর্বদা কার্যকর হয়, আপনার একটু কৌশল দরকার:

find . -type d -name somename \( -exec ... -o -true \) -quit

অথবা

find . -type d -name somename \( -exec ... -o -quit \)

অথবা

find . -type d -name somename \( -exec ... , -quit \) # a comma before -quit

- কিছু ব্যাখ্যা -

কীভাবে findকাজ করে সে সম্পর্কে সর্বাধিক গুরুত্বপূর্ণ বিষয় হ'ল সমস্ত ক্রিয়া ("পরীক্ষা") বাম থেকে ডানদিকে ব্যাখ্যা করা যৌক্তিক ভবিষ্যদ্বাণী হিসাবে বিবেচিত হয় । অতএব, শেষ ক্রিয়াটি (উদাহরণস্বরূপ -quit) কেবল তখনই সম্পাদিত হবে যদি পুরো পূর্ববর্তী অংশটি মিথ্যা না ফেরত । ডিফল্টরূপে, সমস্ত পরীক্ষাগুলি যৌক্তিক "AND" এর সাথে যুক্ত হয়, -oবিকল্পটি যৌথটিকে "OR" তে পরিবর্তন করে।

এর একটি জটিল উপাদানটি -oহ'ল findআপনার আদেশটি "অনুকূলিত" করতে পারে এবং -execআপনি ঠিক লিখলে অংশটি চালাতে পারেন না

find . -type d -name somename -exec ... -o -quit

এটি মোকাবেলা করার জন্য, আপনি find"ও" দিয়ে পাঠানো সমস্ত পূর্বাভাসকে প্রথম বন্ধনীতে আবদ্ধ করে মূল্যায়ন করতে বাধ্য করতে পারেন ।

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