পাঠ্য স্ট্রিং না থাকা সমস্ত ফাইল আমি কীভাবে খুঁজে পাব?


40

পাঠ্য স্ট্রিং না থাকা সমস্ত ফাইলগুলি খুঁজতে আমি কোন সংক্ষিপ্ত আদেশ ব্যবহার করতে পারি?

আমি চেষ্টা করেছি (গ্রেভের প্যারামিটারগুলি উল্টাতে -v ব্যবহার করে) কোন ভাগ্য ছাড়াই:

find . -exec grep -v -l shared.php {} \;

কেউ বলেছেন যে এটি কাজ করবে:

find . ! -exec grep -l shared.php {} \;

তবে এটি আমার পক্ষে কাজ করবে বলে মনে হয় না।

এই পৃষ্ঠায় এই উদাহরণ রয়েছে:

find ./logs -size +1c  > t._tmp
while read filename
do
     grep -q "Process Complete" $filename
     if [ $? -ne 0 ] ; then
             echo $filename
     fi
done < t._tmp
rm -f t_tmp

তবে এটি জটিল এবং মোটেই সংক্ষিপ্ত নয়।

PS: আমি জানি এটি এটি grep -L *করবে তবে আমি কীভাবে গ্রেপের সাথে ফাইলগুলি বাদ দিয়ে ফাইন্ড কমান্ডটি ব্যবহার করতে পারি তা আমি সত্যই জানতে চাই।

পিএসএস: এছাড়াও গ্রিপ কীভাবে grep -L *সিনট্যাক্সের সাথে সাব-ডিরেক্টরি অন্তর্ভুক্ত করবেন তা আমি নিশ্চিত নই , তবে আমি কীভাবে এটি ব্যবহার করতে হয় তা জানতে চাই find:)


1
আপনার লেখা প্রথম কমান্ডটি আমার কম্পিউটারে ভাল কাজ করেছে। আপনি কোন সংস্করণটি ব্যবহার করছেন? এবং যেহেতু আমরা এটিতে এসেছি, সম্ভবত আপনি কোন
ইউনিক্সটি

@ রহমু, এই কমান্ডটি সর্বদা আপনার প্রত্যাশা মতো কাজ করে না। আপনার সম্ভবত খুব নির্দিষ্ট কেস হয়েছে। অনুগ্রহ করে unix.stackexchange.com/questions/339619/…
sgnsajgon

উত্তর:


8
find . -type f | xargs grep -H -c 'shared.php' | grep 0$ | cut -d':' -f1    

অথবা

find . -type f -exec grep -H -c 'shared.php' {} \; | grep 0$ | cut -d':' -f1

এখানে আমরা -cএকটি ফাইলের সাথে মিলের লাইনগুলির সংখ্যা (ব্যবহার করে ) গণনা করছি যদি গণনা 0 হয় তবে এটির প্রয়োজনীয় ফাইল, তাই আমরা আউটপুট থেকে প্রথম কলামটি অর্থাৎ ফাইলের নামটি কেটেছি।



@ গিলস হ্যাঁ আমি আপনার সাথে একমত আমি তার উত্তর +1 আছে।
শচীন দিভেকার

6
এটি কেবল "ভয়ঙ্কর জটিল" নয় তবে এটি ভুল কারণ এটি প্যাটার্নের সাথে মিলে এমন একাধিক 10 টি লাইনের সমন্বিত সমস্ত ফাইল তালিকাভুক্ত করবে। এমনকি যদি এটি grepস্থির করা হয় তবে এটি এখনও কোনও ফাইলের নাম :বা নতুন লাইন অক্ষর ধারণ করবে না ...
don_crissti

@ ডন_ক্রিসটি, উল্লেখ করার জন্য ধন্যবাদ! তবুও, যদি না আপনি প্রচুর অনুলিপি-পেস্ট কোড ব্যবহার করেন, তবে উপরের সমাধানটি হ'ল একটি দুর্দান্ত চালাকি g
ইউফোস

@ ইউফোস - আমি আপনার মন্তব্যটি সত্যিই পাই না ... এটি ভুল । যাইহোক, এটি যদি আপনার কাছে "সত্যিই দুর্দান্ত
জিমিক

56

আপনার সন্ধানের কাজ করা উচিত -v -l(যদি কোনও -Lফাইলের সাথে মিল নেই এমন ফাইলগুলি ) (কোনও লাইনের সাথে মিল নেই এমন ফাইলগুলি), তবে আপনি grepএর পুনরাবৃত্ত ( -r) বিকল্পটিও ব্যবহার করতে পারেন :

grep -rL shared.php .

কোন কাজ কাজ করা উচিত?
সিডব্লিউড

@ কেভিন - দুঃখিত, find . -exec grep -v -l shared.php {} \;(এবং আমি চেষ্টা করি এমন অন্যান্য রূপগুলি) আমার পক্ষে কাজ করছে না। আমি ওএস এক্সে আছি তবে আমার মনে হয় না যে বিষয়টি গুরুত্ব পাবে। আমি আপনাকে একটি +1 দিয়েছি কারণ আমি -rবিকল্পটি ভুলে গিয়েছিলাম ।
সিডব্লিউ

@ সিডব্লিউড আমি জানি এটি পুরানো তবে আমি এটি ভবিষ্যতের পাঠকদের জন্য এখানে রেখে দিতে চাই: আপনি ওএস এক্সে রয়েছেন তা আসলে কোনও পার্থক্য করে। ম্যাক ওএসএক্স ফ্রিবিএসডি কমান্ড ব্যবহার করে। এখানকার বেশিরভাগ লোক লিনাক্স (জিএনইউ) স্টাইলের কমান্ড গ্রহণ করে। তাদের বিভিন্ন যুক্তি রয়েছে, বিশদ পরিচালনা করার বিভিন্ন উপায়।
ধনী হোমোলকা

২০১ 2016 সালের হিসাবে ওএসএক্স সমর্থন হিসাবে উপস্থিত হয়েছে-L
ডেভিড মোলস

@ কেভিন আমি বলেছিলাম এটি করে, এমনটি হয় না যে। :) এমন নয় যে কেউ স্পষ্টভাবে বলেছিল যে এটি তা নয়, তবে মন্তব্যগুলি বিভ্রান্তিকর ছিল (এবং আমি অবশ্যই অন্যান্য ওএস এক্স / বিএসডি বনাম জিএনইউ ইস্যুতে চলে এসেছি)।
ডেভিড মোলস

4

আমি জানি এটি এটি grep -L *করবে তবে আমি কীভাবে findকমান্ডটি grepফাইলগুলি বাদ দিতে ব্যবহার করতে পারি তা আমি সত্যই জানতে চাই

আপনি এটি ব্যবহার করতে findএবং grepপছন্দ করতে পারেন :

find . -type f ! -exec grep -q 'PATTERN' {} \; -print

-printপূর্ববর্তী এক্সপ্রেশন: ! -exec ... {}হিসাবে হিসাবে মূল্যায়ন করা হলে এখানেই কার্যকর করা হবে true
তাই জন্য প্রতিটি ফাইল পাওয়া যায় নি, grep -q 'PATTERN'হয় executed, যদি ফল falseসমগ্র অভিব্যক্তি তারপর ! -exec grep -q 'PATTERN'মূল্যায়ন হিসাবে trueএবং ফাইল নাম printed।


2
এটির একটি স্ট্যান্ডার্ড এবং পোর্টেবল হওয়ার সুবিধা রয়েছে।
স্টাফেন চ্যাজেলাস

জিএনইউর সাথে তফাত রয়েছে grep -Lযদিও এটি তালিকায় অপঠনযোগ্য ফাইলগুলি অন্তর্ভুক্ত করবে।
স্টাফেন চ্যাজেলাস

1

আপনি বিকল্পটি -L অনুসারে ফলাফলের সাথে মেলে না

grep -iL shared.php .

-1

আমি মনে করি আপনি একটি কমান্ড খুঁজছেন

find . -type f -execdir grep -q -v shared.php {} \; -print

বিকল্প -qতোলে grepছেড়ে ব্যবহার করে পরে -execdirআপনার যা দরকার -printপাওয়া ফাইল প্রিন্ট করতে।


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