มีคำสั่งให้ค้นหา Mac ของคุณโดยใช้เทอร์มินัลหรือไม่ ฉันลองใช้ grep เพื่อค้นหา แต่ดูเหมือนว่าไม่ตอบสนองและไม่มีอะไรเกิดขึ้น
ตัวอย่างเช่นฉันจะพิมพ์ "grep Files" (ชื่อโฟลเดอร์) และมันจะพิมพ์บรรทัดว่างเปล่าและไม่มีอะไรเกิดขึ้น
มีคำสั่งให้ค้นหา Mac ของคุณโดยใช้เทอร์มินัลหรือไม่ ฉันลองใช้ grep เพื่อค้นหา แต่ดูเหมือนว่าไม่ตอบสนองและไม่มีอะไรเกิดขึ้น
ตัวอย่างเช่นฉันจะพิมพ์ "grep Files" (ชื่อโฟลเดอร์) และมันจะพิมพ์บรรทัดว่างเปล่าและไม่มีอะไรเกิดขึ้น
คำตอบ:
หากคุณต้องการค้นหาไฟล์ที่มีชื่อที่แน่นอนให้ใช้ find
สามารถดู man page ได้ที่นี่หรือพิมพ์man find
ที่หน้าจอพรอมต์เทอร์มินัล
โดยทั่วไปการค้นหาจะค้นหาเกณฑ์การประชุมไฟล์ที่คุณระบุซ้ำ ตัวอย่างที่ง่ายที่สุด:
find . -name file_name -print
ที่จะค้นหาไฟล์ชื่อ "file_name" เริ่มต้นในไดเรกทอรีปัจจุบันและค้นหาด้านล่างและพิมพ์ไฟล์ด้วยชื่อนั้น
find ~ -name ".DS_Store" -delete
ที่จะค้นหาไฟล์. DS_Store ทั้งหมดและลบออก
คุณสามารถค้นหาโดยใช้ชื่อ regex วันที่ คุณสามารถดำเนินการกับไฟล์ด้วยวิธี Unix ใด ๆ กับภาค-exec
แสดง
นอกจากนี้คุณยังสามารถใช้การค้นหาเป็นจุดเริ่มต้นของการดำเนินการที่ซับซ้อนยิ่งขึ้น ตัวอย่าง:
find . -type f -print | egrep -i '\.m4a$|\.mp3$'
จะค้นหาไฟล์ทั้งหมดที่มีนามสกุล. m4a หรือ. mp3
find . -type f -print | egrep -i '\.m4a$|\.mp3$' | wc -l
จะให้คุณนับจำนวนไฟล์เหล่านั้น
-print
เป็นเพรดิเคตเดียวก็สามารถละเว้นได้ นอกจากนี้ยังมี globbing ง่าย ๆ ที่มีอยู่ ดังนั้นการค้นหา.txt
ไฟล์ทั้งหมดในไดเรกทอรีfoo
จะทำได้ด้วยfind foo -name \\*.txt
find .
ซ้ำจาก cwd ลองพิมพ์find .
ในไดเรกทอรีรากของคุณ!
หากคุณต้องการค้นหาทั้งโฟลเดอร์เพียงใช้ -r บน grep:
grep -r pattern folder/to/search
ด้วย find คุณสามารถใช้ xargs:
find folder/to/search -name '*.txt' | xargs grep pattern
หรือเพื่อให้แน่ใจว่าคุณค้นหาไฟล์สองไฟล์ในเวลาเดียวกันจึงมีการระบุชื่อไฟล์:
find folder/to/search -name '*.txt' | xargs grep -n2 pattern
grep
คาดว่าทั้งลวดลายและตัวกรองข้อมูล หากไม่มีหายไปจะใช้สิ่งที่ผ่านเป็นรูปแบบและรอข้อมูลเพื่อค้นหาผ่านอินพุตมาตรฐาน
หากคุณต้องการใช้ฟิลเตอร์ที่ซับซ้อนfind
กว่านี้ให้ใช้
find ~ -name '*.txt' -exec grep -q 'secret' {} \; -print
-exec
find