এটি করার জন্য প্রয়োজনীয়ভাবে দুটি পদ্ধতি ব্যবহার করতে পারেন। একটি স্ট্রিংকে বিশ্লেষণ করবে এবং অন্যটি প্রতিটি ফাইলের মধ্যে কাজ করবে। স্ট্রিংটিকে পার্সিং করা এমন একটি সরঞ্জাম ব্যবহার করে যেমন grep
,, sed
বা awk
স্পষ্টতই দ্রুত হতে চলেছে তবে এখানে একটি উদাহরণ রয়েছে যা উভয়ই দেখিয়েছে, পাশাপাশি আপনি কীভাবে 2 পদ্ধতিগুলিকে "প্রোফাইল" করতে পারেন।
নমুনা তথ্য
নীচের উদাহরণগুলির জন্য আমরা নিম্নলিখিত ডেটা ব্যবহার করব
$ touch dir{1..3}/dir{100..112}/file{1..5}
$ touch dir{1..3}/dir{100..112}/nile{1..5}
$ touch dir{1..3}/dir{100..112}/knife{1..5}
*f*
ফাইলগুলি থেকে কিছু মুছুন dir1/*
:
$ rm dir1/dir10{0..2}/*f*
পদ্ধতির # 1 - স্ট্রিংগুলির মাধ্যমে পার্সিং
এখানে আমরা নিম্নলিখিত সরঞ্জামগুলি ব্যবহার করতে, চলুন find
, grep
এবং sort
।
$ find . -type f -name '*f*' | grep -o "\(.*\)/" | sort -u | head -5
./dir1/dir103/
./dir1/dir104/
./dir1/dir105/
./dir1/dir106/
./dir1/dir107/
পদ্ধতির # 2 - ফাইলগুলি ব্যবহার করে পার্সিং করা
একই টুল শৃঙ্খল আগের মত এই সময় ছাড়া আমরা ব্যবহার হবেন dirname
পরিবর্তে grep
।
$ find . -type f -name '*f*' -exec dirname {} \; | sort -u | head -5
./dir1/dir103
./dir1/dir104
./dir1/dir105
./dir1/dir106
./dir1/dir107
দ্রষ্টব্য: উপরোক্ত উদাহরণগুলি head -5
কেবলমাত্র এই উদাহরণগুলির জন্য আমরা যে পরিমাণ আউটপুট নিয়ে কাজ করছি তা সীমাবদ্ধ করতে ব্যবহার করছি। আপনার সম্পূর্ণ তালিকা পেতে এগুলি সাধারণত সরানো হবে!
ফলাফল তুলনা
আমরা time
দুটি পদ্ধতির দিকে একবার নজর দিতে ব্যবহার করতে পারি ।
dirname
real 0m0.372s
user 0m0.028s
sys 0m0.106s
, grep
real 0m0.012s
user 0m0.009s
sys 0m0.007s
সুতরাং সম্ভব হলে স্ট্রিংগুলি মোকাবেলা করা সর্বদা সেরা best
বিকল্প স্ট্রিং বিশ্লেষণ পদ্ধতি
গ্রেপ এবং পিসিআরই
$ find . -type f -name '*f*' | grep -oP '^.*(?=/)' | sort -u
sed
$ find . -type f -name '*f*' | sed 's#/[^/]*$##' | sort -u
awk
$ find . -type f -name '*f*' | awk -F'/[^/]*$' '{print $1}' | sort -u
uniq
মিশ্রণ মধ্যে পুনরাবৃত্তি লাইন ইতিমধ্যে অধিকার একে অপরের সাথে পরবর্তী সরিয়ে অনেক সাহায্য করে।find . -type f -name '*f*' -printf '%h\0' | uniq -z | sort -zu | tr '\0' '\n'
। অথবা যদি আপনার সরঞ্জামগুলি কিছুটা বেশি পুরানো হয় তবে ইউনিকের কাছে -z বিকল্প নাও থাকতে পারে।find . -type f -name '*f*' -printf '%h\n' | uniq | sort -u