ถ้าฉันเข้าใจคุณอย่างถูกต้องนี่คือสิ่งที่คุณต้องการทำ:
find . -name '*.py' -print0 | xargs -0 grep 'something' > output.txt
Findไฟล์ทั้งหมดที่มีนามสกุลpy, grepเฉพาะแถวที่มีและบันทึกแถวในsomething output.txtหากไฟล์มีสิ่งใดไฟล์จะถูกแทนที่
แก้ไข: การใช้ -exec:
find . -name '*.py' -exec grep 'something' {} \; > output.txt
ฉันกำลังรวมความคิดเห็นของ Chris Downs ไว้ที่นี่ คำสั่งดังกล่าวจะส่งผลให้grepมีการดำเนินการหลายครั้งเท่าที่findพบว่าเกิดขึ้น แต่ถ้าคุณแทนที่;ด้วย+, grepเรียกว่ามีการส่งออกจากfindการตัดแบ่ง (ถึงขีด จำกัด บางอย่าง) ดูคำถามการใช้เครื่องหมายอัฒภาค (;) vs plus (+) กับ exec ในการค้นหาเพิ่มเติมเกี่ยวกับเรื่อง
+แทน\;มันจะปรับปรุงเวลาดำเนินการอย่างมีนัยสำคัญ (เนื่องจากมันจะขัดแย้งกับข้อโต้แย้งก่อนที่จะดำเนินการจนถึงARG_MAX)