সন্ধানের মধ্যে পার্থক্য কী। এবং খুঁজো . -ছাপা


27

পার্থক্য কি:

find .

এবং

find . -print

কী -printআসলে কি?

$ find .
.
./hello.txt
./hello
./hello/txt
./hello/hello2
./hello/hello2/hello3
./hello/hello2/hello3/txt
./hello/hello2/txt
$ find . -print
.
./hello.txt
./hello
./hello/txt
./hello/hello2
./hello/hello2/hello3
./hello/hello2/hello3/txt
./hello/hello2/txt

উত্তর:


41

findutils findম্যানপেজ থেকে :

যদি কোনও অভিব্যক্তি না দেওয়া হয় তবে অভিব্যক্তিটি -printব্যবহার করা হয় (তবে আপনার -print0পরিবর্তে, যাইহোক আপনার সম্ভবত ব্যবহার করা উচিত )।

( -printএকটি findঅভিব্যক্তি।)

POSIX ডকুমেন্টেশন এই নিশ্চিত করে:

যদি কোনও অভিব্যক্তি উপস্থিত না থাকে, -প্রিন্টটি এক্সপ্রেশন হিসাবে ব্যবহৃত হবে।

তাই find .ঠিক সমতূল্য find . -print; প্রথমটির কোনও অভিব্যক্তি নেই তাই -printঅভ্যন্তরীণভাবে যুক্ত করা হয়।

-printম্যানপেজে আরও কী ঘটে তার ব্যাখ্যা :

-print

সত্য; স্ট্যান্ডার্ড আউটপুটে সম্পূর্ণ ফাইলের নাম মুদ্রণ করুন, তারপরে একটি নতুন লাইন। আপনি যদি অন্য প্রোগ্রামে সন্ধানের আউটপুটটি পাইপ করে থাকেন এবং যে ফাইলগুলির জন্য আপনি অনুসন্ধান করছেন তার মধ্যে একটি নতুন লাইন থাকতে পারে বলে খুব সম্ভবত সম্ভাবনা রয়েছে তবে আপনার -print0পরিবর্তে বিকল্পটি ব্যবহার করার ক্ষেত্রে আপনার গুরুত্ব সহকারে বিবেচনা করা উচিত -print। ফাইলনামগুলিতে কীভাবে অস্বাভাবিক অক্ষর পরিচালনা করা হয় সে সম্পর্কে তথ্যের জন্য UNUSUAL FILENAMES বিভাগটি দেখুন।


শিক্ষানবিস স্তরের প্রশ্নের বাছাই করুন তবে আপনি যে অভিব্যক্তিটি নিয়ে কথা বলছেন তা কী? এটি কি নিয়মিত প্রকাশ?
প্রকাশ

2
@Rishi দেখতে র manpage
স্টিফেন কিট

20

-printডিফল্ট ক্রিয়া । কিছু findপূর্বাভাস ফিল্টার বা শর্তের বিপরীতে কর্ম হিসাবে বিবেচিত হয় । উদাহরণস্বরূপ, একটি ক্রিয়া নয়। এটি একটি শর্ত হিসাবেও ব্যবহার করা যেতে পারে যদিও এটি একটি ক্রিয়া।-type f-exec

পদক্ষেপের অন্তর্ভুক্ত -print, -execএবং -ok। কিছু findবাস্তবায়নের মত অন্যান্য অ-মানক কর্ম predicates আছে -print0, -printf, -execdir, -okdir, -ls...

find files <some-predicates>

কোথায় কেউ <some-predicates>ধারণ করে কর্ম সমতূল্য:

find files \( <some-predicates> \) -print

(কিছু -oঅপারেটর থাকলে উপরের উপরের প্রথম বন্ধনীগুলি নোট করুন )।

সন্দেহ হলে, -printসুনির্দিষ্টভাবে স্পষ্টভাবে ব্যবহার করা (বা -exec printf '%s\0' {} +(বা -print0যেখানে উপলব্ধ সেখানে) যাতে আউটপুট পোস্ট-প্রক্রিয়াজাত করা যায়)।

ডিফল্ট -printক্রিয়াটি পসিক্স দ্বারা নির্দিষ্ট করা হয়। কিছু পুরানো findবাস্তবায়নগুলির জন্য একটি স্পষ্ট প্রয়োজন-print , তবে সাধারণত আজকাল বন্যগুলিতে এটি পাওয়া যায় না।

আরও মনে রাখবেন যে কিছু findবাস্তবায়নগুলি filesবর্তমান ডিরেক্টরিটিতে সন্ধান করতে ডিফল্টর ক্ষেত্রে, বাদ দিতে দেয় । অর্থাৎ তাদের জন্য,

find

সমতুল্য

find .
find . -print

এটি যদিও মানক নয়, তাই এড়ানো সেরা best

বর্ণালীটির আরও ভার্বোজ (এবং দরকারী) শেষের দিকে, কিছু findবাস্তবায়ন ফাইলের পাথগুলিকে একটি -fবিকল্প হিসাবে যুক্তি হিসাবে পাস করার অনুমতি দেয় :

find -f "$file1" -f "$file2" -print

এগুলি একমাত্র findবাস্তবায়ন যা স্বেচ্ছাসেবী ফাইল পাথগুলিতে যেতে দেয় find। অন্যান্য বাস্তবায়নগুলি যেমন ফাইল পাথগুলিকে গ্রহণ করতে পারে না ... !বা ( -printসুতরাং find "$file" -printএমনকি find -- "$file" -print) ধরে নেওয়া $fileহয় কোনও findপ্রাকটিকের নাম নয় (বা প্রথম ক্ষেত্রে বিকল্প)।

দুর্ভাগ্যক্রমে এটি মানক বা পোর্টেবলও নয়।


যদি এটি মানসম্মত না হয় এবং সর্বোত্তমভাবে এড়ানো হয় তবে কেন এটির নাম রাখুন?
ইসহাক

@ আইসাক, কারণ তারা সহজ হতে পারে / সম্ভাব্য টাইপস হতে পারে ...
ভোনব্র্যান্ড


4

লিনাক্সে কোনও পার্থক্য নেই, তবে অন্যান্য সিস্টেমে (যেমন এআইএক্সের মতো) -printআপনার স্ক্রিনে প্রদর্শিত কমান্ডের আউটপুট চাইলে প্রয়োজন হয় ।


3
এটি তখন AIX এর খুব পুরানো সংস্করণ হবে। AIX 4.3 এর findদরকার নেই need এআইএক্স কয়েক দশক ধরে পসিক্সের অনুষঙ্গ হিসাবে কাজ করে।
স্টাফেন শেজেলাস

3

বহু বছর ধরে ফাইন্ড কমান্ডের ডিফল্ট ক্রিয়া হয়নি। একটি সাধারণ ত্রুটি আপনার সন্ধানের আদেশে প্রিন্ট বিকল্পটি যুক্ত করতে ভুলে যাচ্ছিল। আমি আজও এটি অভ্যাসের বাইরে টাইপ করি।

তবে এক পর্যায়ে এটি এখনই ডিফল্ট ক্রিয়া হিসাবে যুক্ত হয়েছিল find .এবং find . -printএটি সমান।


1

-printআপনি যখন অন্য কোনও ক্রিয়াকলাপ করছেন তখন স্পষ্টভাবে ব্যবহার করা কার্যকর হয় যাতে ফাইলের নামটি সেই ক্রিয়াটি সম্পাদিত হওয়ার সাথে প্রদর্শিত হয়।

find . -print -delete

অনুরূপ হবে

rm -rfv *

যেখানে -printঅনুরূপ -v। আপনি যদি অন্তর্ভুক্ত না করেন -printতবে ফাইলের নামগুলি প্রদর্শিত হবে না।

rmকমান্ডটিকে আরও অনুরূপ করার জন্য , এই বাশ কমান্ডটি আগে জারি করুন

shopt -s dotglob

যা *ম্যাচ ডট (লুকানো) ফাইলগুলিকে তৈরি করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.