ঠিক আছে, আসুন ইউনিক্স দর্শনটি প্রয়োগ করি। এই কাজের উপাদানগুলি কী কী?
- পাঠ্য অনুসন্ধান: আপনার কোনও ফাইলের পাঠ্য অনুসন্ধান করার জন্য একটি সরঞ্জাম প্রয়োজন
grep
।
- রিকার্সিভ: ডিরেক্টরি ট্রিতে ফাইল সন্ধান করার জন্য আপনার একটি সরঞ্জাম প্রয়োজন
find
।
- সংরক্ষণাগারগুলি: সেগুলি পড়ার জন্য আপনার একটি সরঞ্জাম প্রয়োজন।
বেশিরভাগ ইউনিক্স প্রোগ্রাম ফাইলগুলিতে কাজ করে। সুতরাং সংরক্ষণাগার উপাদানগুলিতে সহজেই পরিচালনা করতে আপনাকে ফাইল হিসাবে তাদের অ্যাক্সেস করতে হবে, অন্য কথায় আপনাকে ডিরেক্টরি হিসাবে তাদের অ্যাক্সেস করতে হবে।
AVFS ফাইলসিস্টেম উপহার ফাইলসিস্টেম যেখানে প্রত্যেক আর্কাইভ ফাইল একটি দৃশ্য /path/to/foo.zip
ডাইরেক্টরি হিসাবে প্রবেশযোগ্য ~/.avfs/path/to/foo/zip#
। এভিএফএস বেশিরভাগ সাধারণ সংরক্ষণাগার ফাইল ফর্ম্যাটগুলিতে পঠনযোগ্য অ্যাক্সেস সরবরাহ করে।
mountavfs
find ~/.avfs"$PWD" \( -name '*.zip' -o -name '*.tar.gz' -o -name '*.tgz' \) \
-exec sh -c '
find "$0#" -name "*.pm" -exec grep "$1" {\} +
' {} 'Test::Version' \;
fusermount -u ~/.avfs # optional
ব্যাখ্যা:
- এভিএফএস ফাইল সিস্টেমটি মাউন্ট করুন।
- সংরক্ষণাগার ফাইলগুলির জন্য অনুসন্ধান করুন
~/.avfs$PWD
যা বর্তমান ডিরেক্টরিটির অ্যাভিএফএস ভিউ।
- প্রতিটি সংরক্ষণাগারের জন্য, নির্দিষ্ট শেল স্নিপেট (
$0
= সংরক্ষণাগার নাম এবং $1
= অনুসন্ধানের প্যাটার্ন সহ) চালিত করুন।
$0#
সংরক্ষণাগারটির ডিরেক্টরি ভিউ $0
।
{\}
পরিবর্তে আর্গুমেন্টের অভ্যন্তরে {}
বাইরের find
বিকল্পগুলি প্রয়োজন (কিছু এটি করে, কিছু না করে) এর জন্য প্রয়োজন।{}
-exec ;
- .চ্ছিক: অবশেষে এভিএফএস ফাইল সিস্টেমটি আনমাউন্ট করুন।
বা zsh ≥4.3 এ:
mountavfs
grep 'Test::Version' ~/.avfs$PWD/**/*.(tgz|tar.gz|zip)(e\''
reply=($REPLY\#/**/*.pm(.N))
'\')
ব্যাখ্যা:
~/.avfs$PWD/**/*.(tgz|tar.gz|zip)
বর্তমান ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলির এভিএফএস ভিউতে সংরক্ষণাগারগুলি মেলে।
PATTERN(e\''CODE'\')
PATTERN এর প্রতিটি ম্যাচে CODE প্রয়োগ করে। ম্যাচ করা ফাইলটির নাম রয়েছে $REPLY
। reply
অ্যারে সেট করা ম্যাচটিকে নামের তালিকায় পরিণত করে।
$REPLY\#
সংরক্ষণাগারটির ডিরেক্টরি ভিউ।
$REPLY\#/**/*.pm
.pm
সংরক্ষণাগারটিতে ফাইলগুলির সাথে মেলে ।
N
উল্লিখিত glob কোয়ালিফায়ার প্যাটার্ন তোলে একটি খালি তালিকা প্রসারিত যদি কোনো মিল নেই।