সুতরাং ইউনিকসের নিম্নলিখিত আচরণগুলি কেবল আমার জন্য খুব ব্যয় করে:
> touch foo
> touch bar
> ls
bar foo
> find . -name '*oo' -delete
> ls
bar
> touch baz
> ls
bar baz
> find . -delete -name '*ar'
> ls
> #WHAAAT?
এটি কীভাবে বোঝায়?
সুতরাং ইউনিকসের নিম্নলিখিত আচরণগুলি কেবল আমার জন্য খুব ব্যয় করে:
> touch foo
> touch bar
> ls
bar foo
> find . -name '*oo' -delete
> ls
bar
> touch baz
> ls
bar baz
> find . -delete -name '*ar'
> ls
> #WHAAAT?
এটি কীভাবে বোঝায়?
উত্তর:
অনুসন্ধানের কমান্ড লাইনটি বিভিন্ন ধরণের অপশন থেকে তৈরি করা হয়, যা অভিব্যক্তির সাথে মিলিত হয়।
find
বিকল্প -delete
একটি কর্ম নয়।
এর অর্থ এটি এখনও পর্যন্ত মিলে যাওয়া প্রতিটি ফাইলের জন্য কার্যকর করা হয়।
পথগুলির পরে প্রথম বিকল্প হিসাবে, সমস্ত ফাইলের সাথে মিল রয়েছে ... ওফ!
এটি বিপজ্জনক - তবে ম্যান পেজটিতে কমপক্ষে একটি বড় সতর্কতা রয়েছে :
থেকে man find
:
ACTIONS
-delete
Delete files; true if removal succeeded. If the removal failed, an
error message is issued. If -delete fails, find's exit status will
be nonzero (when it eventually exits). Use of -delete automatically
turns on the -depth option.
Warnings: Don't forget that the find command line is evaluated as an
expression, so putting -delete first will make find try to delete
everything below the starting points you specified. When testing a
find command line that you later intend to use with -delete, you
should explicitly specify -depth in order to avoid later surprises.
Because -delete implies -depth, you cannot usefully use -prune and
-delete together.
আরও উপরে থেকে man find
:
EXPRESSIONS
The expression is made up of options (which affect overall operation rather
than the processing of a specific file, and always return true), tests
(which return a true or false value), and actions (which have side effects
and return a true or false value), all separated by operators. -and is
assumed where the operator is omitted.
If the expression contains no actions other than -prune, -print is per‐
formed on all files for which the expression is true.
কোন find
আদেশ কী করবে তা চেষ্টা করে :
কমান্ডটি কী পছন্দ করে তা দেখতে
find . -name '*ar' -delete
মুছে ফেলবে, আপনি প্রথমে -delete
আরও ক্ষতিকারক ক্রিয়া দ্বারা ক্রিয়াটি প্রতিস্থাপন করতে পারবেন - যেমন -fls
বা -print
:
find . -name '*ar' -print
এটি ফাইলগুলি ক্রিয়া দ্বারা প্রভাবিত হয় তা মুদ্রণ করবে।
এই উদাহরণে, -প্রিন্টটি বাদ দেওয়া যেতে পারে। এই ক্ষেত্রে, সেখানে এ সব পদক্ষেপ না তাই সবচেয়ে বড় পরোক্ষভাবে যোগ করা হয়: -print
। (উপরে বর্ণিত "এক্সপ্রেশন" বিভাগের দ্বিতীয় অনুচ্ছেদটি দেখুন)
-delete
পতাকাটি যুক্ত করা এতটা সরল মনে হয়েছিল :-) তবে এর find . -delete
চেয়ে কারও কি কখনও কারণ থাকবে rm -rf .
? বা এটি কেবল find
তার যুক্তিগুলি বিশ্লেষণ এবং প্রক্রিয়া করার উপায় হিসাবে ঘটে ?
warning: use -depth when testing stuff you later want to -delete
যা আপনি আপনার ব্যবহারিক দিকের উদাহরণটিতে করেন নি?
-n
বিকল্পের মতো-মোছার জায়গায় মুদ্রণের ব্যবহার চিত্রিত করতে চাইছিলাম ; প্রথম কমান্ডের অবশ্যই কোনও ব্যবহারিক ব্যবহার করা উচিত নয়; আমি এটি পরিবর্তন করতে যাব।
ইন find
যুক্তি অর্ডার গুরুত্বপূর্ণ, অনেক।
যুক্তিগুলি বিকল্প, পরীক্ষা এবং ক্রিয়া হতে পারে। আপনার প্রথমে প্রথমে বিকল্পগুলি ব্যবহার করা উচিত, তারপরে পরীক্ষা করুন, তারপরে ক্রিয়া করুন।
কখনও কখনও find
এমনকি কোনও সম্ভাব্য খারাপ ক্রম সম্পর্কেও সতর্ক করে দেয় (উদাহরণস্বরূপ যখন আপনি -maxdepth
অন্যান্য যুক্তির পরে ব্যবহার করেন ), তবে অন্যরা মনে হয় এটি তা হয় না।
কি find . -delete -name '*ar'
কি:
আপনি সম্ভবত যা করতে চান তা হ'ল:
find -name '*ar' -delete
এটি, প্রতিটি ফাইলের জন্য এটি দেখতে মেলে '*ar'
কিনা এবং কেবলমাত্র এটি শর্তটি পূরণ করলেই এটি ফাইলটি মুছে ফেলা হবে।
দুঃখিত যদি আপনি খুব দেরী খুঁজে পেয়েছি।