find
( মানক -name
/ -path
পূর্বাভাসের জন্য) ওয়াইল্ডকার্ড নিদর্শনগুলি ঠিক গ্লোবগুলির মতো ব্যবহার করে (নোটটি যে {a,b}
কোনও গ্লোব অপারেটর নয়; প্রসারণের পরে আপনি দুটি গ্লোব পাবেন)। প্রধান পার্থক্য হ'ল স্ল্যাশগুলি পরিচালনা করা (এবং ডট ফাইল এবং ডায়ারগুলিকে বিশেষভাবে বিবেচনা করা হচ্ছে না find
)। *
গ্লোবগুলিতে বেশ কয়েকটি ডিরেক্টরি বিস্তৃত হবে না। */*/*
2 স্তরের ডিরেক্টরিতে তালিকাবদ্ধ হতে পারে। একটি যোগ -path './*/*/*'
করা অন্তত 3 স্তরের গভীর যে কোনও ফাইলের সাথে মেলে এবং find
কোনও ডিরেক্টরিতে কোনও গভীরতার সাথে লিখিতকরণ থেকে বিরত থাকবে না ।
যে বিশেষ জন্য
./foo*bar/quux[A-Z]{.bak,}/pic[0-9][0-9][0-9][0-9]?.jpg
বেশ কয়েকটি গ্লোব, এটি অনুবাদ করা সহজ, আপনি 3 গভীরতায় ডিরেক্টরি চাইছেন, তাই আপনি ব্যবহার করতে পারেন:
find . -mindepth 3 -maxdepth 3 \
\( -path './foo*bar/quux[A-Z].bak/pic[0-9][0-9][0-9][0-9]?.jpg' -o \
-path './foo*bar/quux[A-Z]/pic[0-9][0-9][0-9][0-9]?.jpg' \) \
-exec cmd {} +
(বা -depth 3
কিছু find
বাস্তবায়ন সহ) বা পজিকলি:
find . -path './*/*/*' -prune \
\( -path './foo*bar/quux[A-Z].bak/pic[0-9][0-9][0-9][0-9]?.jpg' -o \
-path './foo*bar/quux[A-Z]/pic[0-9][0-9][0-9][0-9]?.jpg' \) \
-exec cmd {} +
যা গ্যারান্টি দেয় যে এটি *
এবং অক্ষরের সাথে ?
মেলে না /
।
( find
গ্লোবগুলির বিপরীতে foo*bar
বর্তমান ডিরেক্টরিতে ডিরেক্টরিগুলি বাদ দিয়ে অন্য ডিরেক্টরিগুলির বিষয়বস্তু পড়তে পারে - এবং ফাইলগুলির তালিকা বাছাই করা হত না But তবে আমরা যদি সমস্যাটি বাদ দিয়ে দিই [A-Z]
বা অবৈধ চরিত্রের সাথে *
/ এর ?
সাথে আচরণ করা হয়) অনির্ধারিত, আপনি একই ফাইলগুলির তালিকা পাবেন)।
তবে যে কোনও ক্ষেত্রেই, যেমনটি @ মুরু দেখিয়েছেন , সিস্টেম কলের সীমাটি পরিপূর্ণ করার জন্য find
এটি কেবলমাত্র ফাইলের তালিকাকে কয়েক রানে বিভক্ত করার জন্য অবলম্বন করার দরকার নেই execve()
। কিছু শেল zsh
( যেমন zargs
) বা ksh93
(সহ command -x
) এমনকি এটির জন্য অন্তর্নির্মিত সমর্থন করে।
সহ zsh
(যার গ্লোবগুলিতেও সমান -type f
এবং অন্যান্য অন্যান্য find
পূর্বাভাস থাকে), উদাহরণস্বরূপ:
autoload zargs # if not already in ~/.zshrc
zargs ./foo*bar/quux[A-Z](|.bak)/pic[0-9][0-9][0-9][0-9]?.jpg(.) -- cmd
( (|.bak)
একটি উল্লিখিত glob অপারেটর বিপরীত {,.bak}
, (.)
উল্লিখিত glob কোয়ালিফায়ার এর সমতূল্য find
s 'এর -type f
, অ্যাড oN
মতো বাছাই এড়িয়ে যেতে সেখানে find
, D
ডট ফাইল অন্তর্ভুক্ত করার জন্য (উল্লিখিত glob প্রযোজ্য নয়))
Glo find
ডিরেক্টরি গাছ যেমন গ্লোবগুলির মতো ক্রল করার জন্য আপনার এমন কিছু দরকার হয়:
find . ! -name . \( \
\( -path './*/*' -o -name 'foo*bar' -o -prune \) \
-path './*/*/*' -prune -name 'pic[0-9][0-9][0-9][0-9]?.jpg' -exec cmd {} + -o \
\( ! -path './*/*' -o -name 'quux[A-Z]' -o -name 'quux[A-Z].bak' -o -prune \) \)
এটি স্তর স্তর 1 এর সমস্ত ডিরেক্টরি ছাঁটাই হয় foo*bar
এবং সমস্ত স্তর 2 quux[A-Z]
বা quux[A-Z].bak
একগুলি ব্যতীত এবং তারপরে pic...
3 স্তরের একটি নির্বাচন করুন (এবং সেই স্তরের সমস্ত ডিরেক্টরি ছাঁটাই)।
-path
বা এর সাথে ফলাফল এক্সপ্রেশন ব্যবহার করতে সক্ষম হওয়া উচিত-ipath
।find . -path './foo*bar/quux[A-Z]/pic[0-9][0-9][0-9][0-9]?.jpg'
কাজ করা উচিত - এটি মিলবে ছাড়া/fooz/blah/bar/quuxA/pic1234d.jpg
। তাতে কি সমস্যা হবে?