Поиск Mac через терминал?

22

Есть ли команды для поиска вашего Mac с помощью терминала? Я попытался использовать usin grep для поиска, но он кажется не отвечающим и ничего не появляется.

Например, я набрал бы «grep Files» (имя папки), и он просто печатает пустую строку, и ничего не происходит.

JFW
источник
возможный дубликат поиска через текстовые файлы в Mac OS X
Chealion
Я заинтересован в поиске по всем типам файлов; Не обязательно исключая текстовые файлы, но не только текстовые файлы.
JFW

Ответы:

21

Вы также можете использовать mdfindкоманду для выполнения поиска с помощью Spotlight. Больше информации здесь .

Используйте mdfind -name searchtermдля того, чтобы получить файлы с именем searchterm. Используйте mdfind searchtermдля поиска по имени файла и его содержимому.

Редж
источник
25

Если вы просто хотите найти файлы с определенным именем, используйте find

Справочную страницу можно найти ЗДЕСЬ или набрав man findв терминале подсказку.

По сути, find рекурсивно ищет заданные вами критерии соответствия файла. Самый простой пример:

find . -name file_name -print

При этом будет выполнен поиск файла с именем «имя_файла», начиная с текущего каталога и выполнив поиск ниже, и распечатает файлы с этим именем.

find ~ -name ".DS_Store" -delete

Это найдет все файлы .DS_Store и удалит их.

Вы можете искать по имени, регулярному выражению, дате. Вы можете использовать файл любым способом Unix с помощью -execпредиката.

Вы также можете использовать поиск как начало более сложного набора действий. Пример:

find . -type f -print | egrep -i '\.m4a$|\.mp3$'

Найдут все файлы с расширениями .m4a или .mp3

find . -type f -print | egrep -i '\.m4a$|\.mp3$' | wc -l

Даст вам количество этих файлов.

drewk
источник
Если -printэто единственный предикат, его можно опустить; кроме того, есть простой доступный globbing. Таким образом, поиск всех .txtфайлов в каталоге fooбудет сделан сfind foo -name \\*.txt
Норман Грей
@yoshi: Это абсолютно неверно. Печатание find .рекурсивно с cwd. Попробуйте набрать find .в своем корневом каталоге!
drewk
Мой плохой мог поклясться, что он не был рекурсивным, но, возможно, сервер заблокировал -shrug-
Нуала
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.
Игнасио Васкес-Абрамс