ยกเว้นไดเรกทอรีย่อยที่ซ่อนอยู่จาก grep -r


22

ฉันมีสำเนาโลคอล svn ฉันต้องการค้นหาสตริง some_string

$ grep some_string * -r
lang/en:some_string=Some string
lang/.svn/en:some_string=Some string

แต่ถ้าไปไกลกว่านั้นดูเหมือนว่าไดเรกทอรีระดับแรกจะถูกยกเว้น:

$ cd lang && grep some_string * -r
en:some_string=Some string

ฉันจะลบ diretories svn ที่ซ่อนอยู่ออกจากผลลัพธ์ของฉันได้อย่างไรและไม่เพียง แต่จากระดับความลึกแรก

$ grep some_string * -r --which_option_here?
lang/en:some_string=Some string

ไม่ได้คำตอบโดยตรง แต่คุณอาจต้องการที่จะลองแอ๊
ทำให้หมดกำลังใจ

คำตอบ:


21

ใช้--exclude-dirตัวเลือกเช่น:

grep -r --exclude-dir='.*' some_string

จากman grep:

--exclude-dir=DIR
              Exclude directories matching the pattern DIR from recursive searches.

อย่างไรก็ตามโปรดทราบว่า--exclude-dirตัวเลือกนั้นมีเฉพาะใน GNU grep ถ้าคุณgrepไม่สนับสนุนคุณอาจต้องใช้เครื่องมืออื่น ๆ ที่พบเช่น :

find . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \;

ฉันต้องมีลีนุกซ์ที่เก่าเกินไป ...
MUY เบลเยี่ยม

ฉันได้แก้ไขคำตอบลองfindรุ่นถ้า grep --exclude-dirของคุณไม่สนับสนุน
jimmij

ฉันมีรุ่น grep รุ่น 2.5.1 และไม่มีอาร์กิวเมนต์ --exclude-dir และฉันได้ลองทุกอย่างที่ฉันคิด ...
MUY Belgium

1
วิธีที่สองไม่ได้ใช้--exclude-dirคุณลองมาแล้วหรือยัง?
jimmij

ฉันมี "ตัวเลือกที่ไม่ต้องชำระ"
MUY Belgium

1

ปกติฉันจะใช้สิ่งนี้:

for e in $(find . -maxdepth 1 -type d); do echo ${e#\./}; done | grep -v '^\.'

${e%\./}จะลบรายการแรก./จากนั้นgrepจะลบทุกสิ่งที่ขึ้นต้นด้วยจุด


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