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


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.