কীভাবে আমি "গ্রেপ: আর্গুমেন্টের তালিকা খুব দীর্ঘ" ত্রুটি এড়াতে পারি?


7

আমি ম্যাক 10.7.5 এবং একটি ব্যাশ শেল ব্যবহার করছি। আমি একটি গ্রুপের ফাইলগুলিতে স্ট্রিংয়ের উদাহরণগুলি সন্ধান করার চেষ্টা করছি তবে এই ত্রুটিটি পেতে থাকুন

Daves-MacBook-Pro:folder davea$ find . -name "*" | xargs grep 'state-icons'
xargs: grep: Argument list too long

এই ত্রুটিটি এড়াতে আমি কীভাবে কমান্ডটি (বা অনুরূপ) চালাতে পারি?


grep '...' <( find … )হতে পারে?

উত্তর:


7

আপনি আর্গুমেন্টের সংখ্যা সীমাবদ্ধ করার -nবিকল্পটি ব্যবহার করতে পারেন xargs

find . -name "*" | xargs -n 20 grep 'state-icons'

মনে রাখবেন যে এটি তাদের নামে সাদা স্থান সহ ফাইলগুলির জন্য কাজ করে না।


3
এটি তাদের নামে ফাঁকা ফাইলগুলির জন্য কাজ করে। এটি কেবলমাত্র তাদের নামে নতুন লাইনের ফাইলগুলির জন্য ব্যর্থ হয় যা খুব বিরল।
ধনী 15

যুক্তি সংখ্যার সীমাবদ্ধতা কি সঠিক ফলাফলগুলি প্রদর্শিত হওয়া থেকে প্রতিরোধ করবে? শেষ পর্যন্ত আমার লক্ষ্যটি কেবল ত্রুটি বার্তাটি অপসারণের বিপরীতে পছন্দসই স্ট্রিংয়ের উদাহরণ সহ ফাইলগুলি সন্ধান করা।
ডেভ

@ ডেভ: না, grepবেশ কয়েকবার চালানো হবে, যার মধ্যে প্রতিটি 20 টি ফাইল আর্গুমেন্ট রয়েছে। ডিরেক্টরি খোলার চেষ্টা করার সময় আপনি ত্রুটিগুলি এড়াতে যুক্ত -type fকরতে findপারেন grep
চোরোবা

2
একটি ঝুঁকি রয়েছে যে findরিপোর্টগুলি যদি বলে, 61 ফাইলগুলি, তবে চারবার - তিনবার 20 ফাইলের সাথে এবং একবার 1 ফাইলের সাথে xargsচলবে grep। যখন grepএকাধিক ফাইল দিয়ে চালানো হয়, এটি ফাইল (গুলি) এর নাম (গুলি) রিপোর্ট করে যেখানে এটি ম্যাচগুলি খুঁজে পায়; শুধুমাত্র একটি ফাইল নাম যুক্তি দিয়ে না। এটি ঠিক করার জন্য সাধারণত ব্যবহৃত একটি কৌশলটি বলা হয় xargs -n 20 grep 'state-icons' /dev/null, সুতরাং 21 টি ফাইলের সাথে তিনবার এবং 2 ফাইলের সাথে একবার xargsচলবে grep–– অতিরিক্ত ফাইল, অবশ্যই /dev/null, যা অন্যথায় রানটির কোনও প্রভাব ফেলবে না।
স্কট

2
@ স্কট: আপনি (যদি সমর্থন করে) -Hবিকল্পটিও ব্যবহার করতে grepপারেন।
চোরোবা

-2

আপনি যদি ফাইল নামটি দিয়ে সিচ করতে চান তবে এটি সম্পর্কে কী হবে :

for x in ./**/*.*; do echo "$x" | grep 'state-icons' ; done

এবং আপনি যদি ফাইল সামগ্রীর মধ্য দিয়ে সিচ করতে চান তবে এটি :

for x in ./**/*.*; do grep 'state-icons' "$x" ; done

1
এটি grepকেবল ফাইলের নামগুলিতে চলবে , তাদের বিষয়বস্তুগুলিতে নয়। এছাড়াও, এর *.*অর্থ "সমস্ত ফাইল" নয় (এটি উইন্ডোজে যেমন রয়েছে); এটি ফাইলগুলির সন্ধানকে সীমাবদ্ধ করে যার .নাম রয়েছে।
স্কট

@ স্কট তবে -nameযুক্তিটি ইঙ্গিত দেয় যে তারা ফাইলের নামটি অনুসন্ধান করতে চায়। যদি তারা ফাইলের বিষয়বস্তু সম্পর্কে সন্ধান করতে চান তবে কেবল বাদ দিন echoএবং ব্যবহার করুনgrep 'state-icons' $x

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