ฉันจะ grep เฉพาะบางไฟล์ในไดเรกทอรีซ้ำได้อย่างไร


14

ฉันใหม่เพื่อ linux และ grep และพยายามหาทางของฉัน

โดยใช้find -name *.javaฉันสามารถค้นหาชื่อของไฟล์ java ทั้งหมดในไดเรกทอรีเฉพาะ สมมติว่าฉันต้องการนับจำนวนครั้งที่fooเกิดขึ้นในไฟล์เหล่านี้ฉันจะทำอย่างไร

ฉันพยายามทำสิ่งต่าง ๆ เช่น:

grep -r "foo" *.java

และได้รับคำตอบเช่น:

grep:  *.java:  No such file or directory

ความคิดใด ๆ



1
ขอโทษฉันจะดูให้ดีขึ้นในครั้งต่อไป น่าสังเกตว่าคำถามนั้นคล้ายกันมาก
Eric Wilson

1
ชื่อเรื่องของ 3512 อาจจะดีกว่ามาก "คำถามการใช้งาน grep พื้นฐาน" ไม่ได้บอกอะไรคุณมากมายเกี่ยวกับคำถามจริง เราอาจจะมีหลอกมากกว่านี้นอกจากจะได้รับการแก้ไข
ริชาร์ดฮอสกิ้นส์

1
@richardhoskins แก้ไขแล้ว
John T

คำตอบ:


16
find . -name '*.java' | xargs grep <your pattern here>

5
ยังดีกว่าใช้รายการที่สิ้นสุดด้วย null เพื่อให้ชื่อไฟล์ที่มีช่องว่างอยู่นั้นไม่ได้แบ่งออกเป็นสองชื่อไฟล์: find -name '* .java' -type f -print0 | xargs -0 grep <รูปแบบของคุณที่นี่>
CoverosGene

1
@CoverosGene: คุณสามารถใช้ตัวเลือก --replace เพื่อ xargs เพื่อจัดการสิ่งนั้น - เช่นนี้: ... | xargs - แทนที่ grep "{}" <รูปแบบ>
arathorn

ขอบคุณมากฉันรู้ว่าต้องมีคำสั่งที่ทำในสิ่งที่xargsทำ
Eric Wilson

6

มีเครื่องมือที่ออกแบบมาเป็นพิเศษสำหรับความต้องการประเภทนี้: ack .

แอ๊เป็นเครื่องมือเช่น grep มุ่งเป้าไปที่โปรแกรมเมอร์ที่มีต้นไม้ขนาดใหญ่ของรหัสที่มาที่แตกต่างกัน

โปรดอ่าน"เหตุผล 10 อันดับแรกที่ควรใช้ ack แทนที่จะเป็น grep" ที่หน้าack


1
Meh เครื่องมือ unix จริงต้องใช้ชื่อเรียกซ้ำที่อ้างถึงมรดกของมัน ... เช่น abtg [ABTG's Better Than Grep] หรืออะไรซักอย่าง ACK? คิดว่าดีเท่านั้นเกี่ยวกับเรื่องนั้นคือการที่ผู้เขียน NACK ดีขึ้นแล้วได้ชื่อหยิบออกมา;)
Mikeage

หนึ่งในเหตุผลที่ฉันชอบ ack คือคุณสามารถระบุประเภทไฟล์ได้ ตัวอย่างเช่นฉันด้วย "ack --html <pattern>" มันค้นหาไฟล์. html, .htm, .xhtml, .dhtml ทั้งหมดของฉันในคราวเดียว
Mark van Lent

Ack ได้ทำการแทนที่ grep สำหรับฉันแล้ว
Ryan C. Thompson


0

หา -type f -name '* .java' -print0 | xargs -0 grep -wo 'foo' | ห้องสุขา -l


3
ยินดีต้อนรับสู่ SuperUser! คุณจะพบว่าคำตอบของคุณได้รับความสนใจมากขึ้นเมื่อเป็นไปตามคำถามปัจจุบัน (นี่คือจาก 2009) และเมื่อคุณอธิบายว่าทำไมคำตอบของคุณดีกว่าคำตอบที่ได้รับการยอมรับแล้ว
Eric Wilson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.