กำลังค้นหา Mac ผ่านเทอร์มินัล


22

มีคำสั่งให้ค้นหา Mac ของคุณโดยใช้เทอร์มินัลหรือไม่ ฉันลองใช้ grep เพื่อค้นหา แต่ดูเหมือนว่าไม่ตอบสนองและไม่มีอะไรเกิดขึ้น

ตัวอย่างเช่นฉันจะพิมพ์ "grep Files" (ชื่อโฟลเดอร์) และมันจะพิมพ์บรรทัดว่างเปล่าและไม่มีอะไรเกิดขึ้น


เป็นไปได้ที่ซ้ำกันของการค้นหาผ่านไฟล์ข้อความใน Mac OS X
Chealion

ฉันสนใจที่จะค้นหาไฟล์ทุกประเภท; ไม่จำเป็นต้องยกเว้นไฟล์ข้อความ แต่ไม่เพียง แต่ไฟล์ข้อความ
JFW

คำตอบ:


21

คุณยังสามารถใช้mdfindคำสั่งเพื่อทำการค้นหาด้วย Spotlight ข้อมูลเพิ่มเติมที่นี่

ใช้เพื่อดึงไฟล์ที่มีชื่อmdfind -name searchterm searchtermใช้mdfind searchtermเพื่อค้นหาชื่อไฟล์และเนื้อหา


25

หากคุณต้องการค้นหาไฟล์ที่มีชื่อที่แน่นอนให้ใช้ 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
Norman Grey

@yoshi: นั่นมันผิดจริง ๆ พิมพ์ดีดfind .ซ้ำจาก cwd ลองพิมพ์find .ในไดเรกทอรีรากของคุณ!
drewk

ไม่ดีของฉันอาจสาบานได้ว่ามันไม่ได้เกิดซ้ำ แต่บางทีเซิร์ฟเวอร์มีการสับ -shrug-
nuala

5

หากคุณต้องการค้นหาทั้งโฟลเดอร์เพียงใช้ -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

2

grepคาดว่าทั้งลวดลายและตัวกรองข้อมูล หากไม่มีหายไปจะใช้สิ่งที่ผ่านเป็นรูปแบบและรอข้อมูลเพื่อค้นหาผ่านอินพุตมาตรฐาน

หากคุณต้องการใช้ฟิลเตอร์ที่ซับซ้อนfindกว่านี้ให้ใช้

find ~ -name '*.txt' -exec grep -q 'secret' {} \; -print

ฉันแค่ต้องการให้มันค้นหาไฟล์ที่มีชื่อที่ฉันป้อนลงในคำสั่ง
JFW

ในกรณีที่คุณไม่จำเป็นต้องใช้คำกริยาใน-exec find
Ignacio Vazquez-Abrams
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.