কমান্ডের "ফাইন্ড" কমান্ড কীভাবে ব্যবহার করবেন?


13

findকমান্ডের আউটপুট পুনর্নির্দেশ করতে চাই catযাতে আমি প্রদত্ত ফাইলটির ডেটা মুদ্রণ করতে পারি।

উদাহরণস্বরূপ, যদি ফলাফলের আউটপুট হয় /aFile/readmeতবে বিড়ালটিকে ব্যাখ্যা করা উচিত cat ./aFile/readme। আমি কীভাবে তাত্ক্ষণিকভাবে এটি করতে পারি?

আমার কি পাইপ ব্যবহার করতে হবে?

আমি এর সংস্করণ চেষ্টা করেছি:

cat | find ./inhere -size 1033c 2> /dev/null

তবে আমার ধারণা এই সম্পূর্ণ ভুল? অবশ্যই আমি নিশ্চিত যে আউটপুটটি কেবল একটি ফাইল এবং একাধিক ফাইল নয়।

তাহলে আমি কীভাবে এটি করতে পারি? আমি গুগলে অনুসন্ধান করেছি এবং এর সমাধান খুঁজে পাইনি, সম্ভবত আমি সঠিক অনুসন্ধান করি নি: পি

উত্তর:


21

আপনি ক্রিয়াটি findব্যবহার করে একা এটি করতে পারেন -exec:

find /location -size 1033c -exec cat {} +

{}প্রাপ্ত ফাইলগুলিতে প্রসারিত +হবে এবং আমাদের অনুরোধ অনুযায়ী যতটা সম্ভব আর্গুমেন্ট পড়তে সক্ষম করবে cat, কারণ বিড়াল একাধিক যুক্তি নিতে পারে।

আপনার যদি এক্সটেনশন findনা থাকে +বা আপনি ফাইলগুলি একে একে পড়তে চান:

find /location -size 1033c -exec cat {} \;

আপনি যদি কোনও বিকল্প ব্যবহার করতে চান তবে করুন cat:

find /location -size 1033c -exec cat -n {} +
find /location -size 1033c -exec cat -n {} \;

এখানে আমি -nলাইন নম্বরগুলি পেতে বিকল্পটি ব্যবহার করছি ।


সুতরাং, যদি আমি সঠিক: {} একটি পরিবর্তনশীল এর মতো যে এটিতে ফাইন্ড কমান্ডের আউটপুট সংরক্ষণ করা হয় এবং "+" চিহ্নের পরে আপনার বিড়ালের পরামিতিগুলি লেখার কথা? না? সম্পাদনা: ঠিক আছে আপনি আপনার পোস্ট সম্পাদনা করেছেন এবং এখন আপনি আমার প্রশ্নের উত্তর দিয়েছেন: পি থ্যাঙ্কস ম্যান! সলভ!
একসাপ্সি

@ জেনারেল 656 আমার সম্পাদনাগুলি পরীক্ষা করুন ..
হিমাইল

1
এটা সত্য যে আমি সম্পর্কে জানেন না catএর -nবিকল্প আমার অবাক লাগে। আমি এলোমেলো প্রশ্ন পড়া পছন্দ করি।
mazunki

1

কমান্ড সাবস্টিটিউশন

আর একটি বিকল্প হ'ল কমান্ড সাবস্টিটিউশন ব্যবহার করা । কমান্ডটি মোড়ানো কমান্ডটি $()চালাবে এবং কমান্ডটি তার আউটপুট দিয়ে প্রতিস্থাপন করবে।

cat $(find ./inhere -size 1033c 2> /dev/null)

হয়ে যাবে

cat ./inhere/file1 .inhere/file3

এটি পিছনে টিক্স সহ মোড়ানো কমান্ডগুলির পুরানো স্টাইলটি ব্যবহার করার সমান is

cat `find ./inhere -size 1033c 2> /dev/null`

উপরে লিঙ্কযুক্ত ডক্স থেকে আরও বিশদ details

বাশ একটি সাব-শেল পরিবেশে কমান্ড প্রয়োগ করে এবং কমান্ডের বিকল্পের পরিবর্তে কমান্ডের স্ট্যান্ডার্ড আউটপুট সহ কোনও নতুন ট্রিলিং নিউলাইন মুছে ফেলা করে। এম্বেড করা নতুনলাইনগুলি মোছা হয় না তবে শব্দ বিভাজনের সময় সেগুলি মুছে ফেলা হতে পারে। কমান্ড প্রতিস্থাপন $(cat file)সমতুল্য কিন্তু দ্রুত দ্বারা প্রতিস্থাপন করা যেতে পারে $(< file)

যখন প্রতিকল্পন পুরোনো ধাঁচের backquote ফর্ম ব্যবহার করা হয়, ব্যাকস্ল্যাশ যখন দ্বারা অনুসরণ সমেত এটির আক্ষরিক অর্থ বজায় $, `অথবা \। ব্যাকস্ল্যাশ দ্বারা পূর্বের প্রথম ব্যাককোয়টি কমান্ড প্রতিস্থাপনের অবসান ঘটায়। $(command)ফর্মটি ব্যবহার করার সময় , প্রথম বন্ধনীগুলির মধ্যে সমস্ত অক্ষর কমান্ড তৈরি করে; কারও সাথেই বিশেষ চিকিত্সা করা হয় না।

কমান্ড বিকল্পগুলি নেস্টেড হতে পারে। ব্যাককোয়েড ফর্মটি ব্যবহার করার সময় বাসা বাঁধার জন্য, ব্যাকস্ল্যাশগুলি সহ অভ্যন্তরীণ ব্যাককোয়েটগুলি ছেড়ে যান।

প্রতিস্থাপনটি যদি ডাবল উদ্ধৃতিগুলির মধ্যে উপস্থিত হয়, তবে শব্দ বিভাজন এবং ফাইলের নাম সম্প্রসারণ ফলাফলগুলিতে করা হয় না।

ব্যবহারের কয়েকটি ভাল উদাহরণের জন্য এই অন্যান্য উত্তরটি দেখুন ।


নোট যে findখুঁজে বের করে অনেকগুলি ফাইল, এই একটি "যুক্তি তালিকাটি অত্যন্ত দীর্ঘ" উৎপন্ন হবে ত্রুটি ধার ডাকা বের করার চেষ্টা cat। এটিতে হোয়াইটস্পেস অক্ষরযুক্ত ফাইলের নামগুলি পরিচালনা করতে সমস্যা হতে পারে এবং সম্ভবত ফাইলের নামগুলি গ্লোব্বিং অক্ষরযুক্ত ফাইলের নামও থাকতে পারে।
কুসালানন্দ

-1

এটি পাঠ্যের নাম এবং বিষয়বস্তু (ascii) কেবল পুনরাবৃত্তভাবে মুদ্রণ করবে ..

find . -type f -exec grep -Iq . {} \; -print | xargs awk 'FNR==1{print FILENAME ":" $0; }'

আরও একটি চেষ্টা

find . -type f -exec grep -Iq . {} \; -printf "\n%p:" -exec cat {} \;

-2

পাইপ এবং xargs ব্যবহার করুন

find /* -name pg_hba.conf | xargs cat

অনুমতিগুলির অভাবের কারণে যদি এটি ব্যর্থ হয় তবে আপনি যে ডিরেক্টরিটি অনুসন্ধান করছেন তার উপর অনুসন্ধান কমান্ড কার্যকর করার অনুমতি রয়েছে কিনা তা নিশ্চিত করতে আপনি sudo ব্যবহার করতে পারেন।

 sudo find /* -name pg_hba.conf | xargs sudo cat

1
এবং যদি কেউ একটি ফাইল নামে পরিচিত বলে তৈরি করে থাকে /tmp/ /dev/urandom /pg_hba.conf, যা এর সম্পূর্ণ সামগ্রীটিকে রুট করে দেবে /dev/urandom। এর চেয়ে খারাপ সম্ভবত প্রসঙ্গের উপর নির্ভর করে করা যেতে পারে। xargsমোটামুটি ছাড়া ছাড়া কখনই ব্যবহার করা উচিত -0নয়। এছাড়াও sudo xargsচেয়ে ভাল হবে xargs sudo। এবং /*হিসাবে ভাল হবে /
স্টাফেন চেজেলাস

1
স্ট্যান্ডআউটে ফাইল সামগ্রী প্রিন্ট করতে ওপি বিড়ালটিকে ব্যবহার করতে চায়। সুতরাং উদ্দেশ্য বিড়াল দ্বারা পরিবেশন করা হয়। প্রশ্নটি কীভাবে ফাইলের বিষয়বস্তু মুদ্রণের জন্য আউট কমান্ড থেকে ফাইন্ড কমান্ড থেকে বিড়ালকে কীভাবে ব্যবহার করতে হয় তা কীভাবে সুডো ব্যবহার করতে বা সন্ধান করতে হয় না, উপরের কমান্ডটি প্রশ্নের সমাধান করে। হ্যাঁ xargs -0 একমাত্র গঠনমূলক জিনিস যা আপনি দেখিয়েছিলেন। কিন্তু ব্যবহারটি দেখায়নি। অভদ্র না হওয়ার চেষ্টা করুন।
অ্যাপ্লিকেশন কাজ 1

খারাপ লাগলে দুঃখিত। এটা উদ্দেশ্য ছিল না। আমি সীমাবদ্ধতা নির্দেশ করতে চেয়েছিলেন। আপনার উত্তর খারাপ অভ্যাস দেখায় ( find|xargsছাড়া -0সত্যই নিষিদ্ধ করা উচিত), সুতরাং নীচে ভোট। findছাড়া আউটপুট -print0নির্ভরযোগ্যভাবে পোস্ট প্রসেসেবল হয় না। -print0মান না। এই কথাটি বলার পরে, মানকটি sudo find / -name pg_hba.conf -exec cat {} +আপনাকে কন্টেন্টটি ছুঁড়ে ফেলতে পারে /dev/urandom(উদাহরণস্বরূপ যদি কেউ /tmp/pg_hba.confএটি থেকে একটি সিমলিংক তৈরি করে এবং এর বাইরে কোনও সহজ বহনযোগ্য কোনও উপায় নেই যার অন্তত রেসের শর্ত নেই)।
স্টাফেন চেজেলাস

1
আসুন sudo"শুধু ক্ষেত্রে" ব্যবহার করা উচিত না , আমরা কি?
lindhe

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