linux - Grep থেকে.svn ডিরেক্টরি বাদ দাও



bash (8)

এই প্রশ্নটি ইতিমধ্যে একটি উত্তর আছে:

যখন আমি আমার Subversion কাজ কপি ডিরেক্টরি grep, ফলাফল .svn ডিরেক্টরি থেকে প্রচুর ফাইল অন্তর্ভুক্ত। এটা grep একটি ডিরেক্টরি recursively সম্ভব, কিন্তু .svn ডিরেক্টরি থেকে সব ফলাফল বাদ?

https://ffff65535.com


Grep সংস্করণ 2.5.1 এর জন্য আপনি .svn ফাইলগুলি ফিল্টার করতে একাধিক - .svn আইটেম যোগ করতে পারেন।

$ grep -V | grep grep
grep (GNU grep) 2.5.1

GREP_OPTIONS="--exclude=*.svn-base --exclude=entries --exclude=all-wcprops" grep -l -R  whatever ./

Grep> = 2.5.1a জন্য

আপনি এটি আপনার পরিবেশে রাখতে পারেন (যেমন। .bashrc )

export GREP_OPTIONS='--exclude-dir=".svn"'

পিএস: অ্যাড্রিনানকে ধন্যবাদ, আমার সংস্করণে অতিরিক্ত উদ্ধৃতি আছে:

export GREP_OPTIONS='--exclude-dir=.svn'

অন্য একটি বিকল্প, যাহা একটি গ্রহণযোগ্য উত্তর হিসাবে অনুভূত নাও হতে পারে, গিটে রেপো ক্লোন করা এবং git grep ব্যবহার করা।

কদাচিৎ, আমি সভান রিপোজিটরিগুলিতে চালিত যা এত বিশাল, এটি git-svn মাধ্যমে ক্লোন করার জন্য কেবল অবাঞ্ছিত। এই বিরল ক্ষেত্রে, আমি svngrep একটি ডবল grep সমাধান ব্যবহার svngrep , কিন্তু এখানে অনেকগুলি উত্তর ইঙ্গিত করে যে, এটি বড় সংগ্রহস্থলে ধীর হতে পারে এবং '.svn' ঘটনাগুলি যা ডিরেক্টরি নয় তা বাদ দেয়। আমি তর্ক করবো যে এই খুব কমই হবে যদিও ...

এছাড়াও একাধিক greps ধীর কর্মক্ষমতা সংক্রান্ত, আপনি git মত কিছু ব্যবহার করেছি একবার, বেশিরভাগ সবকিছু svn মধ্যে ধীর মনে হয়!

এক শেষ জিনিস .., svngrep আমার বৈচিত্র্য colorization মাধ্যমে পাস করে, সাবধান, বাস্তবায়ন কুৎসিত! মোটামুটি grep -rn "$what" $where | egrep -v "$ignore" | grep --color "$what" grep -rn "$what" $where | egrep -v "$ignore" | grep --color "$what"


আপনার যদি GNU Grep থাকে, তবে এটি এভাবে কাজ করা উচিত:

grep --exclude-dir=".svn"

যদি GNU Grep ছাড়া ইউনিক্স সিস্টেমে থাকে তবে নিম্নলিখিতটি চেষ্টা করুন:

grep -R "whatever you like" *|grep -v "\.svn/*" 

আমার GNU grep 2.5, --exclude-dirs একটি বৈধ বিকল্প নয়। বিকল্প হিসাবে, এটি আমার জন্য ভাল কাজ করেছে:

grep --exclude="*.svn-base"

এই সমস্ত লাইন বাদ দিয়ে এটি একটি ভাল সমাধান হওয়া উচিত। .svn/ এটি কোনও ভুল .svn/ ভুলভাবে এমন লাইন ফিল্টার করবে না।


আমি আমার বিশাল কোড বেসে ডবল grep'in চেষ্টা করে এবং এটি চিরতরে গ্রহণ তাই আমি আমার সহকর্মীর সাহায্যে এই সমাধান পেয়েছিলাম

'Grep -v' এর তুলনায় সেই ডিরেক্টরিগুলিকে প্রক্রিয়াকরণ থেকে সন্ধান করা বন্ধ করে দেওয়ার জন্য এটি অনেক দ্রুত হয় কারণ এটি সমস্ত কিছু প্রক্রিয়া করে এবং কেবল ফলাফল প্রদর্শন করে

find . -name .svn -prune -o -type f -print0 | xargs -0 egrep 'YOUR STRING'

আপনি এই কমান্ডটি আপনার .bashrc এ উল্লিখিত করতে পারেন

alias sgrep='find . -name .svn build -prune -o -type f -print0 | xargs -0 egrep '

এখন কেবল ব্যবহার করুন

sgrep 'whatever' 

দুই greps কৌতুক করতে হবে:

  1. প্রথম grep সবকিছু পেতে হবে।
  2. দ্বিতীয় grep ইনপুট (পাইপিংয়ের মাধ্যমে) হিসাবে প্রথম grep আউটপুট ব্যবহার করবে। -V ফ্ল্যাগটি ব্যবহার করে, grep লাইনগুলি নির্বাচন করবে যা অনুসন্ধান পদগুলির সাথে মেলে না। Voila। আপনি প্রথম grep থেকে সমস্ত ouputs দিয়ে রেখেছেন যা ফাইলপথে .svn ধারণ করে না।

    -v, --invert-match মিলিত হওয়ার অনুভূতিটি বিচ্ছিন্ন করুন, অ-মিলিত লাইন নির্বাচন করুন।

    grep the_text_you_want_to_search_for * | grep -v .svn
    

grep --exclude-dir=".svn"

কাজ করে কারণ ".svn" নামটি বরং অনন্য। কিন্তু এটি আরো সাধারণকরণের নামতে ব্যর্থ হতে পারে।

grep --exclude-dir="work"

বুলেটপ্রুফ নয়, যদি আপনার "/ home / user / work" এবং "/ home / user / stuff / work" থাকে তবে এটি উভয়কে বাদ দেবে। শুধুমাত্র পূর্বের ফোল্ডারের নাম বাদ দেওয়ার জন্য "/ * / work / *" সংজ্ঞায়িত করা সম্ভব নয়। যতদূর আমি পরীক্ষা করতে পারি, GNU grep তে সহজ - ব্যতিক্রম ডিরেক্টরিগুলি বাদ দেওয়া হবে না।





grep