গ্রেপ-আর থেকে লুকানো সাব-ডাইরেক্টরিগুলি বাদ দিন


22

আমার কাছে একটি এসএনএন স্থানীয় কপি রয়েছে, আমি স্ট্রিংটিতে কিছু_ স্ট্রিং করতে চাই।

$ grep some_string * -r
lang/en:some_string=Some string
lang/.svn/en:some_string=Some string

তবে যদি আরও খানিকটা এগিয়ে যায় তবে মনে হয় প্রথম স্তরের লুকানো ডিরেক্টরিগুলি বাদ দেওয়া হয়েছে:

$ cd lang && grep some_string * -r
en:some_string=Some string

আমি কীভাবে আমার আউটপুট থেকে গোপন এসএনএন নির্দেশনাগুলি সরাতে পারি, এবং কেবল প্রথম গভীরতা স্তর থেকে নয়?

$ grep some_string * -r --which_option_here?
lang/en:some_string=Some string

সরাসরি উত্তর নয়, তবে আপনি এসকে চেষ্টা করতে পারেন ।
ছাড়ুন

উত্তর:


21

--exclude-dirবিকল্প ব্যবহার করুন , যেমন:

grep -r --exclude-dir='.*' some_string

থেকে man grep:

--exclude-dir=DIR
              Exclude directories matching the pattern DIR from recursive searches.

তবে নোট করুন, এই --exclude-dirবিকল্পটি কেবল জিএনইউ গ্রেপ-তে উপলব্ধ। যদি grepআপনি এটি সমর্থন করে না, উদাহরণস্বরূপ আপনাকে অন্য সরঞ্জাম ব্যবহার করতে হতে পারে :

find . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \;

আমার অবশ্যই একটি খুব পুরানো লিনাক্স থাকতে হবে ...
MUY বেলজিয়াম

আমি উত্তরটি সম্পাদনা করেছি, findযদি আপনার গ্রেপ সমর্থন না করে তবে সংস্করণটি চেষ্টা করে দেখুন --exclude-dir
জিম্মিজ

আমার সংস্করণ গ্রেপ সংস্করণ ২.২.১ রয়েছে এবং এতে কোনও - এক্সক্লুড-ডির যুক্তি নেই এবং আমি যা ভেবে দেখেছি সব চেষ্টা করেছি ...
MUY বেলজিয়াম

1
দ্বিতীয় সমাধানটি ব্যবহার করে না --exclude-dir, আপনি কি চেষ্টা করে দেখেছেন?
জিম্মিজ

আমার কাছে "অপ্রয়োজনীয় বিকল্প" আছে
বেলজিয়াম

1

আমি সাধারণত এটি ব্যবহার করি:

for e in $(find . -maxdepth 1 -type d); do echo ${e#\./}; done | grep -v '^\.'

${e%\./}প্রথমটি সরিয়ে ফেলবে ./এবং তারপরে grepবিন্দু দিয়ে শুরু হওয়া সমস্ত কিছু সরিয়ে ফেলবে।


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