ฉันต้องการ grep ไฟล์ทั้งหมดยกเว้นไฟล์บางประเภท?


36

ฉันจะเรียกgrepไฟล์ซ้ำภายในโฟลเดอร์ที่กำหนดยกเว้นไฟล์ประเภทคู่ได้อย่างไร

ตัวอย่างเช่นฉันกำลังมองหาสตริงภายในโฟลเดอร์เวิร์กสเปซของฉัน แต่มันสิ้นสุดการค้นหาภายในไฟล์ sql และสร้างสตริงที่ต่อเนื่องกัน

ดังนั้นในกรณีนี้ฉันต้องการไปgrepยังโฟลเดอร์พื้นที่ทำงานยกเว้นไฟล์ sql

ฉันควรมองหาหนึ่งซับถ้าเป็นไปได้


5
ระวังว่า Linux และ Unix และ unix-a-like ไม่มี "ประเภทไฟล์" ในแบบที่คุณต้องการ เป็นเพียงการประชุมที่ชื่อไฟล์มีส่วนต่อท้าย ".c" หรือ ".txt" หรือ ".sql" คำต่อท้ายเหล่านั้นไม่ได้มีส่วนขยาย "สไตล์" ของ Windows แม้แต่ตัวบ่งชี้ที่น้อยกว่ามากว่า SQL หรือข้อความหรือรหัสต้นฉบับ C ข้างในไฟล์
Bruce Ediger

คำตอบ:



8

สิ่งนี้จะทำเพื่อคุณและยกเว้นไฟล์. sql และ. txt:

find /some/dir -type f ! -name '*\.sql' ! -name '*.txt' -print0 | xargs -0 grep 'foobar'

อย่างไรก็ตามดูเหมือนว่าแอ๊จะเป็นเครื่องมือที่ดีกว่าสำหรับสิ่งที่คุณพยายามทำ:

ack -a --nosql 'foobar' /some/dir

ขออภัยฉันไม่เห็นส่วน 'ack' และใส่ไว้ในคำตอบของฉันซึ่งถูกลบไปแล้ว
โอกาส

หมายเหตุผู้ใช้อื่นที่ack - a --nobinaryมีไฟล์ไบนารี
Michael Mrozek

ไม่จำเป็นต้องใช้แบ็กสแลชในรูปแบบชื่อไฟล์
Kusalananda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.