ถ้าฉันเข้าใจคุณอย่างถูกต้องนี่คือสิ่งที่คุณต้องการทำ:
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
)