Пошук Mac через термінал?


22

чи є команди для пошуку вашого Mac за допомогою терміналу? Я спробував usin grep для пошуку, але це здається дещо невідповідним, і нічого не виходить.

Наприклад, я б набрав "grep Files" (назва папки), і він просто виводить порожній рядок, і нічого не відбувається.



Мені цікаво шукати всі типи файлів; Не обов'язково виключати текстові файли, але не тільки текстові файли.
JFW

Відповіді:


21

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

Використовуйте mdfind -name searchtermдля отримання файлів з назвою searchterm. Використовуйте mdfind searchtermдля пошуку за ім'ям та вмістом файлу.


25

Якщо ви просто хочете знайти файли з певним іменем, використовуйте find

Сторінку чоловіка можна знайти ТУТ або набравши man findв підказці терміналу.

В основному, пошук рекурсивно шукатиме вказані вами критерії зустрічі файлів. Найпростіший приклад:

find . -name file_name -print

Це дозволить шукати файл, названий "ім'я_файлу", починаючи з поточного каталогу та шукаючи нижче та друкуючи файли з цим ім'ям.

find ~ -name ".DS_Store" -delete

Це знайде всі .DS_Store файли та видалить їх.

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

Ви також можете використовувати find як початок більш складного конвеєра дій. Приклад:

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

Знайдете всі файли з розширеннями .m4a або .mp3

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

Дасть вам кількість цих файлів.


Якщо -printєдиний присудок, його можна опустити; Крім того, доступні прості глобуси. Таким чином, знайти всі .txtфайли в каталозі fooможна було б за допомогоюfind foo -name \\*.txt
Нормана Грея

@yoshi: Це абсолютно помилково. Введення тексту find .рекурсивно від диска. Спробуйте ввести find .у свій кореневий каталог!
намалював

Мій поганий міг би поклястись, що це не рекурсивно, але, можливо, сервер захлинувся -shrug-
nuala

5

Якщо ви хочете здійснити пошук у всій папці, просто використовуйте -r on grep:

grep -r pattern folder/to/search

При знаходженні ви також можете використовувати xargs:

find folder/to/search -name '*.txt' | xargs grep pattern

або щоб переконатися, що ви одночасно шукаєте два файли, а отже, вказані імена файлів:

find folder/to/search -name '*.txt' | xargs grep -n2 pattern

2

grepочікує як шаблон, так і файловий специфікатор. Якщо цього немає, він використовує те, що передається як зразок, і чекає пошуку даних за допомогою стандартного введення.

Якщо ви хочете використовувати більш складний filepec, тоді використовуйте find.

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

Я просто хочу, щоб він знайшов файли з ім'ям, яке я ввожу в команду.
JFW

У цьому випадку вам не потрібно використовувати -execприсудок у find.
Ігнасіо Васкес-Абрамс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.