find
কমান্ড দ্বারা ছাঁটাই করা ডিরেক্টরিগুলি কেন ছাপানো হয়েছিল তা এবং আমি কীভাবে -prune
কাজ করেছি তার কয়েকটি জটিল জটিল বিবরণ নিয়ে আমি বিভ্রান্ত হয়ে পড়েছিলাম , তবে কয়েকটি উদাহরণ দিয়ে এটি বের করতে সক্ষম হয়েছি।
নীচের উদাহরণগুলি চালনার জন্য নিম্নলিখিত ডিরেক্টরি এবং ফাইলগুলি তৈরি করুন।
mkdir aa
mkdir bb
touch file1
touch aa/file1
touch bb/file3
এই কাঠামোটি তৈরি করতে:
$ tree
.
├── aa
│ └── file1
├── bb
│ └── file3
└── file1
নামের জন্য ডিরেক্টরি অনুসন্ধান করতে এখন ব্যবহার করুন aa
। এখানে কোন সমস্যা নেই।
$ find . -type d -name aa
./aa
এএ ব্যতীত অন্য সমস্ত ডিরেক্টরি সন্ধান করুন এবং আমরা বর্তমান ডিরেক্টরিটি পাই .
এবং ./bb
এটিও বোধগম্য হয়।
$ find . -type d ! -name aa
.
./bb
এতদূর ভাল, তবে আমরা যখন ব্যবহার করি -prune
, তখন ছাঁটাই করা ডিরেক্টরিটি ফিরে পাই যা প্রাথমিকভাবে আমাকে বিভ্রান্ত করেছিল কারণ আমি আশা করছিলাম যে এটি অন্য সমস্ত ডিরেক্টরি ফিরে পাবে এবং ছাঁটাই করা হচ্ছে না।
$ find . -type d -name aa -prune
./aa
কারণ কেন এটিকে ডিরেক্টরির ছেঁটে হচ্ছে ব্যাখ্যা করা হয়, না ফেরৎ -prune
man পৃষ্ঠা নির্দেশিত হিসাবে বিভাগে টিমো এর উত্তর কিন্তু এ EXPRESSIONS
অধ্যায়:
অভিব্যক্তি ছাড়া অন্য কোনো অ্যাকশন থাকে -prune
,
-print
সমস্ত ফাইল, যার জন্য অভিব্যক্তি সত্য উপর সঞ্চালিত হয়।
যার অর্থ, যেহেতু এক্সপ্রেশন aa
ডিরেক্টরি নামের সাথে মিলে যায় তাই এক্সপ্রেশনটি সত্যের সাথে মূল্যায়ন করবে এবং এটি মুদ্রণ করা হবে কারণ -print
পুরো কমান্ডের শেষে অন্তর্নিহিতভাবে একটি যুক্ত করা হবে তা সন্ধান করুন। এটি কোনও যুক্ত করবে না -print
, তবে আপনি যদি উদ্দেশ্যমূলকভাবে অ্যাকশনটি -o -print
নিজেই শেষ করেন:
find . -type d -name aa -prune -o -print
.
./file1
./bb
./bb/file3
এখানে সন্ধানের কমান্ডটি আরও অন্তর্ভুক্ত করে -print
না, এবং সেই ডিরেক্টরিটি আমরা ছাঁটাই করছি (aa
করছি তা মুদ্রিত হবে না।
সুতরাং অবশেষে, আমরা যদি একটি ধারা যুক্ত করি যা এর file*
পরে ফাইলের নাম প্যাটার্ন সহ ফাইলগুলির সন্ধান করে -o
, তবে আপনাকে -print
দ্বিতীয় দফাটির শেষে এই প্রবন্ধটি রাখতে হবে:
find . \( -type d -name aa -prune \) -o \( -type f -name 'file*' -print \)
./file1
./bb/file3
এই কাজটি করার কারণটি একই কারণ: যদি আপনি -print
দ্বিতীয় ধারাটিতে কিছু না রাখেন , তবে যেহেতু ক্রিয়া ব্যতীত অন্য কোনও পদক্ষেপ নেই -prune
, -print
সন্ধানের ফলে কমান্ডের সমাপ্তিতে একটি স্বয়ংক্রিয়ভাবে যুক্ত হবে , যার ফলে -prune
ধারাটি মুদ্রণযোগ্য হবে ছাঁটাই ডিরেক্টরি:
find . \( \( -type d -name aa -prune \) -o \( -type f -name 'file*' \) \) -print
./aa
./file1
./bb/file3
সাধারণভাবে, আপনাকে -print
দ্বিতীয় ধারাতে কমান্ডটি স্থাপন করতে হবে। আপনি যদি এটি মূল পোস্টারের মতো করে মাঝখানে রাখেন তবে এটি সঠিকভাবে কাজ করবে না কারণ ছাঁটাই করা ফাইলগুলি তাত্ক্ষণিকভাবে মুদ্রণ করা হবে এবং দ্বিতীয় ধারাটি যে ফাইলগুলি চায় সেগুলি বাছাই করার সুযোগ পাবে না:
find . \( -type d -name aa -prune -o -print \) -o \( -type f -name 'file*' \)
.
./file1
./bb
./bb/file3
দুর্ভাগ্যক্রমে, মূল পোস্টারটি উপরে রেখে কমান্ডটি ভুল পেয়েছে -print
ভুল জায়গায় । এটি তার নির্দিষ্ট ক্ষেত্রে কাজ করতে পারে, তবে এটি সাধারণ ক্ষেত্রে কাজ করে না।
এমন হাজার হাজার লোক রয়েছে যারা কীভাবে -prune
কাজ করে তা বুঝতে সমস্যা হয় । find
মানুষ পৃষ্ঠাটিকে এই কমান্ড সম্পর্কে অফুরন্ত বিশ্বব্যাপী বিভ্রান্তির প্রতিরোধ করার জন্য আপডেট করা উচিত নয়।
-print
, অন্যথায় অন্তর্নিহিত-print
পুরো শর্তে প্রযোজ্য