วิธีค้นหาไฟล์ที่มีข้อความบางข้อความใน Terminal


168

ฉันต้องการค้นหาไฟล์ทั้งหมดที่มีสตริงข้อความที่แน่นอน คุณจะทำสิ่งนั้นใน Terminal อย่างไร


หากคุณต้องการผลลัพธ์ที่รวดเร็วให้ใช้ Spotlight นอกจากนี้หากคุณต้องการค้นหาไฟล์ที่ไม่จำเป็นต้องจัดเก็บข้อความโดยตรงภายในไฟล์เช่น PDF หรือ ODF
Joey

คำแนะนำที่ดี แต่ในกรณีของฉันฉันไม่แน่ใจว่าไฟล์ถูกทำดัชนีเนื่องจากอยู่ในไดรเวอร์เครือข่าย และยังเป็นไฟล์ xml ที่เป็นของโปรแกรมเฉพาะ
Svish

ลองดูที่unix.stackexchange.com/a/37932/213832โซลูชั่นนี้ใช้งานได้ดี
boyd4715

คำตอบ:


280
grep -r 'text goes here' path_goes_here

1
ฉันอยากจะแนะนำman grepให้ค้นพบตัวเลือกที่ยอดเยี่ยมทั้งหมดของ grep
Ludovic Kuty

รายการนี้แสดงไฟล์ทุกไฟล์ที่มีอยู่ในพา ธ และเพิ่ม: No such file or directory ฉันกำลังพยายามหารายการข้อความที่เกิดขึ้น เราจะรับรายชื่อนั้นได้อย่างไร?
CP3O

7
เข้าใจแล้ว: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O

แต่จะคืนค่าเนื้อหาของไฟล์ที่ตรงกันไม่ใช่รายละเอียดไฟล์ (ชื่อพา ธ ) คำแนะนำของ @ @ CP3O ทำงานได้
geotheory

28

ใช้สปอตไลท์

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

อย่าลืมดู:

man mdfind

2
สิ่งนี้จะทำงานกับไฟล์ที่สปอตไลท์ไม่ได้จัดทำดัชนี (เช่นไฟล์ภายในโฟลเดอร์ที่ซ่อนไฟล์กำหนดค่าระบบ ฯลฯ ) หรือไม่
Peter Berg

Grep ดูเหมือนจะไม่แยกวิเคราะห์ไฟล์. xlsx แต่วิธีนี้ใช้ได้ดี อีกตัวอย่างที่ง่าย: mdfind -onlyin "searchtext"
FvD


4

คุณสามารถเลือกหนึ่งในด้านล่างขึ้นอยู่กับรสนิยมและความต้องการของคุณ หากว่าคุณต้องการค้นหาไฟล์ที่มีข้อความ - "async" ซึ่งเรียกซ้ำในไดเรกทอรีปัจจุบันคุณสามารถทำได้ด้วยวิธีใดวิธีหนึ่งดังนี้:

ใช้ grep ป้อนคำอธิบายรูปภาพที่นี่

ใช้งาน ป้อนคำอธิบายรูปภาพที่นี่


2

คำตอบของ Ignacio นั้นยอดเยี่ยมมากและช่วยฉันค้นหาไฟล์ที่มีข้อความบางอย่าง ปัญหาเดียวที่ฉันพบคือเมื่อเรียกใช้คำสั่งนี้ไฟล์ทั้งหมดจะปรากฏในรายการรวมถึงสิ่งที่รูปแบบไม่ปรากฏขึ้น

No such file or directory นี่คือสิ่งที่ฉันเห็นข้างๆไฟล์ที่ไม่มีรูปแบบ

ถ้าคุณเพิ่ม-sคำสั่งแทน, ใน: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH DIRECTORY] -sใช้แล้วมันจะแสดงเฉพาะไฟล์ที่มีรูปแบบ

ในทำนองเดียวกันถ้าgrep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -sคำสั่งจะใช้มันพิมพ์ไฟล์รวมทั้งหมายเลขบรรทัดและการเกิดขึ้นของรูปแบบ

โปรดแก้ไขฉันหากความเข้าใจของฉันไม่ถูกต้อง

การอ้างอิง: ฉันจะมี grep ไม่พิมพ์ข้อผิดพลาด 'ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวได้อย่างไร?


อีกวิธีหนึ่งในการหลีกเลี่ยงสิ่งที่น่ารำคาญไม่มีข้อผิดพลาดของไฟล์เช่นนั้นคือไปป์ stderr ถึง null grep ... 2>/dev/null. โซลูชันนี้ใช้ได้กับโปรแกรมส่วนใหญ่เนื่องจากรายงานข้อผิดพลาดในสตรีม stderr ไม่ใช่ stdout ฉันใช้วิธีนี้หลายครั้งด้วยfindกันเพราะจะบอกว่าPermission ถูกปฏิเสธสำหรับหลาย ๆ ไฟล์
jpaugh

(1) หากคุณได้รับNo such file or directoryข้อความไฟล์ที่มีอยู่แสดงว่าคุณกำลังทำอะไรผิดพลาดหรือระบบของคุณเสีย (2) สิ่งใด[PATH OF PARENT]เกี่ยวข้องกับอะไรบ้าง?
G-Man

@ G-Man ฉันแก้ไขคำตอบเพื่อแสดงให้เห็นว่า[PATH OF DIRECTORY]มีใครบางคนที่ไม่คุ้นเคยอยากรู้ว่าทำไมฉันถึงได้./
CP3O

@ G-Man ฉันใช้ Mac ไม่ใช่ Ubuntu ไม่แน่ใจว่าระบบของฉันจะพังอย่างไรฉันแทบจะไม่ได้ทำอะไรเลย
CP3O
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.