หนึ่งในคำสั่ง BASH ที่ฉันโปรดปรานคือ:
find . -name '*.*' -exec grep 'SearchString' {} /dev/null \;
ซึ่งค้นหาเนื้อหาของไฟล์ทั้งหมดที่และด้านล่างของไดเรกทอรีปัจจุบันสำหรับ SearchString ที่ระบุ ในฐานะนักพัฒนาซอฟต์แวร์นี้มีประโยชน์หลายครั้ง
เนื่องจากโครงการปัจจุบันของฉันและโครงสร้างของ codebase ของฉันอย่างไรก็ตามฉันต้องการทำให้คำสั่ง BASH นี้มีความก้าวหน้ายิ่งขึ้นโดยไม่ต้องค้นหาไฟล์ใด ๆ ที่อยู่ในหรือด้านล่างไดเรกทอรีที่มี ".svn" หรือไฟล์ใด ๆ ที่ ลงท้ายด้วย ".html"
หน้า MAN สำหรับการค้นหาชนิดของฉันสับสนว่า ฉันลองใช้ -prune และมันทำให้ฉันมีพฤติกรรมแปลก ๆ ในความพยายามข้ามหน้า. html เท่านั้น (เพื่อเริ่มต้น) ฉันพยายาม:
find . -wholename './*.html' -prune -exec grep 'SearchString' {} /dev/null \;
และไม่ได้รับพฤติกรรมที่ฉันหวังไว้ ฉันคิดว่าฉันอาจพลาดจุด -prune พวกคุณช่วยฉันได้ไหม
ขอบคุณ
grep -rl 'SearchString'
find
ในการค้นหาภายในไฟล์
-name '*.*'
ไม่พบไฟล์ทั้งหมด : เฉพาะไฟล์ที่มี.
ชื่อ (การใช้งาน*.*
โดยทั่วไปคือ DOS-ism ในขณะที่ใน Unix คุณใช้งานได้ตามปกติ*
) find . -exec ...
จริงๆตรงกับพวกเขาทั้งหมดเพียงลบอาร์กิวเมนต์ทั้งหมด: หรือถ้าคุณต้องการใช้ grep กับไฟล์ (และข้ามไดเรกทอรี) find . -type f -exec ...
เท่านั้นให้ทำ
find
ไม่ใช่คำสั่ง bash ในตัว แต่เป็นโปรแกรมแยกต่างหาก