linux - شرح - كيف يمكنني التمزق مع تجنب "عدد كبير جدا من الحجج"




what are grep patterns called? (4)

هذا السؤال له إجابة هنا:

كنت أحاول تنظيف بعض البريد المزعج البريد الإلكتروني واجهت مشكلة. كمية الملفات في قائمة الانتظار، كانت كبيرة لدرجة أن الأمر المعتاد كان غير قادر على معالجة. من شأنه أن يعطيني خطأ حول الحجج كثيرة جدا.

وعادة ما أفعل ذلك

grep -i [email protected].com 1US* | awk -F: '{print $1}' | xargs rm

1US * يمكن أن يكون أي شيء بين 1US [a-زا-Z]. الشيء الوحيد الذي يمكن أن تجعل العمل كان يعمل هذا الانتهاك الرهيب. ملف واحد، مع 1USA، 1USA، 1USB الخ، من خلال الأبجدية بأكملها. وأنا أعلم أن لديهم وسيلة لتشغيل هذا أكثر كفاءة.

grep -s $SPAMMER /var/mailcleaner/spool/exim_stage1/input/1USa* | awk -F: '{print $1}' | xargs rm
grep -s $SPAMMER /var/mailcleaner/spool/exim_stage1/input/1USA* | awk -F: '{print $1}' | xargs rm

استخدام find وحلقة بدلا من xargs .

find . -name '1US*' | \
while read x; do grep -iq [email protected] "$x" && rm "$x"; done

هذا يستخدم الأنابيب والحلقات بدلا من الحجج (سواء ل grep و rm ) ويمنع القضايا ذات الصلة مع حدود على الحجج.


استخدام زارجس هو أكثر كفاءة من استخدام "العثور على ... -exec غريب" لأن لديك عملية أقل الإبداعات الخ

وإحدى الطرق التي يجب اتباعها هي:

ls 1US* | xargs grep -i [email protected].com | awk -F: '{print $1}' | xargs rm

ولكن أسهل سيكون:

find . -iname "1US*" -exec rm {} \;

تشغيل عدة أمثلة من غريب. بدلا من

grep -i [email protected].com 1US* | awk '{...}' | xargs rm

فعل

(for i in 1US*; do grep -li [email protected] "$i"; done) | xargs rm

لاحظ العلم -l، لأننا نريد فقط اسم ملف المباراة. هذا سوف يسرع غريب (إنهاء على المباراة الأولى) ويجعل النصي أوك الخاص بك غير مستحق. ويمكن تحسين هذا عن طريق التحقق من حالة العودة من غريب ودعوة آرإم، وليس باستخدام زارجس (زارجس هو هشة جدا، المنظمة البحرية الدولية). سأعطيك أفضل نسخة إذا كنت تسأل.

نأمل أن يساعد.


يمكنك استخدام find على العثور على جميع الملفات التي اسم تبدأ مع نمط '1US'. ثم يمكنك أنابيب الإخراج إلى زارجس التي سوف تأخذ الرعاية، أن قائمة الحجة لن ينمو إلى حد كبير والتعامل مع دعوة غريب. لاحظ أنني قد استخدمت نولبيت لفصل أسماء الملفات ل زارجس. هذا يتجنب المشاكل مع أسماء الملفات إشكالية . ؛)

find -maxdepth 1 -name '1US*' -printf '%f\0' | xargs -0 grep -u [email protected] | awk ...




grep