วิธีค้นหาคำในเนื้อหาทั้งหมดของไดเรกทอรีใน linux


15

ต้องค้นหาบางสิ่งในเนื้อหาทั้งหมด

ฉันกำลังพยายาม:

find . | xargs grep word

ฉันได้รับข้อผิดพลาด:

xargs: อัญประกาศ

ทำอย่างไรจึงจะได้สิ่งนี้?

คำตอบ:


15

xargsคาดว่าอินพุตในรูปแบบที่ไม่มีคำสั่งอื่นสร้างดังนั้นจึงใช้งานได้ยาก สิ่งที่ผิดพลาดคือคุณมีไฟล์ที่ต้องใส่ชื่อในอินพุตxargs(อาจมีก')

หาก grep ของคุณรองรับ-rหรือ-Rตัวเลือกสำหรับการค้นหาแบบเรียกซ้ำใช้มัน

grep -r word .

มิฉะนั้นใช้หลักของ-exec findนี่เป็นวิธีปกติในการบรรลุผลเช่นเดียวกับxargsยกเว้นโดยไม่มีข้อ จำกัด เกี่ยวกับชื่อไฟล์ เวอร์ชันล่าสุดที่สมเหตุสมผลfindช่วยให้คุณสามารถจัดกลุ่มหลายไฟล์ในการโทรครั้งเดียวไปยังคำสั่งเสริม การส่งผ่าน/dev/nullเพื่อgrepให้แน่ใจว่าจะแสดงชื่อไฟล์ต่อหน้าการแข่งขันแต่ละครั้งแม้ว่าจะมีการเรียกชื่อไฟล์เดียว

find . -type f -exec grep word /dev/null {} +

เวอร์ชันเก่ากว่าของfind(บนระบบเก่าหรือ OpenBSD หรือยูทิลิตี้ลดลงเช่น BusyBox) สามารถเรียกคำสั่งเสริมในไฟล์เดียวในแต่ละครั้ง

find . -type f -exec grep word /dev/null {} \;

บางเวอร์ชันfindและxargsมีส่วนขยายที่ให้พวกเขาสื่อสารได้อย่างถูกต้องโดยใช้อักขระ null เพื่อแยกชื่อไฟล์ดังนั้นจึงไม่จำเป็นต้องมีการอ้างอิง วันนี้เพียง OpenBSD -exec … {} +มีคุณลักษณะนี้ได้โดยไม่ต้อง

find . -type f -print0 | xargs -0 grep word /dev/null

+1 /dev/nullโดยเฉพาะอย่างยิ่งสำหรับ มันเป็นเรื่องที่น่ารำคาญเมื่อรูปแบบผลลัพธ์สามารถเปลี่ยนแปลงได้ขึ้นอยู่กับจำนวนไฟล์ที่ตรงกัน ... ขอบคุณ
Peter.O

12

ฉันเดาว่าคุณหมายถึงตัวเลือกแรก

grep recursive สำหรับค้นหาเนื้อหาภายในไฟล์

grep -R "content_to_search" /path/to/directory

ls ซ้ำสำหรับการค้นหาไฟล์ที่ตรงกัน

ls -lR | grep "your_search"

grep -rin สำหรับ recursive-case_insensitive-show_line_number

ฉันต้องการค้นหาเนื้อหาของแต่ละไฟล์

ตัวแรกจะคืนค่าการกลับเป็นซ้ำใด ๆ ในไฟล์ใด ๆ โดยระบุไฟล์ที่พบการกลับเป็นซ้ำ

2

หากคุณมีเครื่องมือ GNU (ซึ่งคุณทำหากแท็ก Linux นั้นถูกต้อง) คุณสามารถใช้-print0และ-0แก้ไขปัญหาการอ้างอิงตามปกติ:

find . -type f -print0 | xargs -0 grep word

0

นอกจากนี้ยังมีแอ๊กชั่นก็ออกแบบมาเพื่อข้ามไดเรกทอรีพิเศษเช่น.svn, .gitและเช่น มันเป็นเครื่องมือรายวันสำหรับนักพัฒนา

มันค่อนข้างใกล้เคียงกับสำหรับสวิตช์ทั่วไป

อดีต :

ack -r string .

แพ็คเกจack-grepสำหรับคนชอบเดเบียนและเดเบียน



-1

ฉันคิดว่าคุณต้องการค้นหาสตริงในไฟล์

ลอง find . -name "*" | xargs grep -l "string"


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