ฉันพยายามหาวิธีสแกนระบบ Linux ทั้งหมดของฉันสำหรับไฟล์ทั้งหมดที่มีสตริงข้อความที่เฉพาะเจาะจง เพียงชี้แจงฉันกำลังมองหาข้อความภายในไฟล์ไม่ใช่ในชื่อไฟล์
เมื่อฉันมองหาวิธีการทำสิ่งนี้ฉันเจอวิธีแก้ปัญหานี้สองครั้ง:
find / -type f -exec grep -H 'text-to-find-here' {} \;
อย่างไรก็ตามมันใช้งานไม่ได้ ดูเหมือนว่าจะแสดงไฟล์ทุกไฟล์ในระบบ
นี่เป็นวิธีที่เหมาะสมในการทำสิ่งนี้หรือไม่? ถ้าไม่ฉันควรทำอย่างไร ความสามารถในการค้นหาสตริงข้อความในไฟล์นี้จะเป็นประโยชน์อย่างยิ่งสำหรับโครงการการเขียนโปรแกรมบางอย่างที่ฉันทำ
-H
ด้วย-l
(และอาจจะgrep
ด้วยfgrep
) หากต้องการยกเว้นไฟล์ที่มีรูปแบบชื่อที่แน่นอนคุณจะต้องใช้find
วิธีการขั้นสูงเพิ่มเติม มัน worthwile เรียนรู้ที่จะใช้find
แต่ man find
เพียงแค่
find … -exec <cmd> +
find … -exec <cmd> \;
จะง่ายต่อการพิมพ์และเร็วกว่า มันจะทำงานเฉพาะในกรณีที่<cmd>
ยอมรับข้อโต้แย้งชื่อไฟล์จำนวนเท่าใดก็ได้ การประหยัดเวลาในการประมวลผลนั้นใหญ่มากหาก<cmd>
เริ่มต้นช้าเช่นสคริปต์ Python หรือ Ruby
grep "pattern" path/*.txt
.
ว่าเป็นอักขระตัวแทนเดียวในกลุ่ม คำแนะนำของฉันคือใช้ fgrep หรือ egrep เสมอ