ต้องค้นหาบางสิ่งในเนื้อหาทั้งหมด
ฉันกำลังพยายาม:
find . | xargs grep word
ฉันได้รับข้อผิดพลาด:
xargs: อัญประกาศ
ทำอย่างไรจึงจะได้สิ่งนี้?
ต้องค้นหาบางสิ่งในเนื้อหาทั้งหมด
ฉันกำลังพยายาม:
find . | xargs grep word
ฉันได้รับข้อผิดพลาด:
xargs: อัญประกาศ
ทำอย่างไรจึงจะได้สิ่งนี้?
คำตอบ:
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
ฉันเดาว่าคุณหมายถึงตัวเลือกแรก
grep recursive สำหรับค้นหาเนื้อหาภายในไฟล์
grep -R "content_to_search" /path/to/directory
ls ซ้ำสำหรับการค้นหาไฟล์ที่ตรงกัน
ls -lR | grep "your_search"
หากคุณมีเครื่องมือ GNU (ซึ่งคุณทำหากแท็ก Linux นั้นถูกต้อง) คุณสามารถใช้-print0
และ-0
แก้ไขปัญหาการอ้างอิงตามปกติ:
find . -type f -print0 | xargs -0 grep word
ในไดเรกทอรีปัจจุบันคุณสามารถใช้ grep:
grep -irl root .
ฉันคิดว่าคุณต้องการค้นหาสตริงในไฟล์
ลอง find . -name "*" | xargs grep -l "string"
/dev/null
โดยเฉพาะอย่างยิ่งสำหรับ มันเป็นเรื่องที่น่ารำคาญเมื่อรูปแบบผลลัพธ์สามารถเปลี่ยนแปลงได้ขึ้นอยู่กับจำนวนไฟล์ที่ตรงกัน ... ขอบคุณ