Як знайти файли з певним текстом у Терміналі


168

Я хотів би знайти всі файли, що містять певний рядок тексту. Як би ти це зробив у Терміналі?


Якщо ви хочете швидкого результату, використовуйте Прожектор. Також якщо ви хочете знайти файли, які не обов'язково зберігають текст безпосередньо у файлі, наприклад, PDF або ODF.
— Joey

Гарна порада, але в моєму випадку я не впевнений, що файли індексуються, оскільки вони є на мережевих драйверах. А також це файли xml, що належать до певної програми.
— Свиш

Погляньте на unix.stackexchange.com/a/37932/213832 це рішення працює добре
— boyd4715

Відповіді:


280
grep -r 'text goes here' path_goes_here

1
Я б запропонував man grepвідкрити всі чудові варіанти грепу
— Людовик Куті

У цьому списку відображається кожен файл, який існує на шляху, і додається: No such file or directory Я намагаюся отримати лише список текстових подій. Як ми можемо отримати цей список?
— CP3O

7
Зрозумів: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
— CP3O

Але це повертає вміст відповідних файлів, а не деталі файлу (ім'я, шлях). @ Пропозиція CP3O працює.
— геотеорія

28

використовувати прожектор

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

не забудьте подивитися:

man mdfind

2
Чи буде це працювати для файлів, які прожектор не індексує (тобто файли всередині прихованих папок, файли конфігурації системи тощо)?
— Пітер Берг

Греп, здається, не розбирає файли .xlsx, але це вийшло чудово. Ще один простий приклад: mdfind -onlyin. "searchtext"
— FvD

11
  1. Через Ack

brew install ack ack "text goes here"

  1. Через знахідку

find . |grep "text goes here"

  1. Через греп

grep -RnslI "text goes here"


4

Ви можете вибрати одне з наведених нижче, залежно від вашого смаку та потреб. Припустимо, вам потрібно шукати файли, що містять текст - "async", рекурсивно в поточному каталозі, ви можете зробити це одним із способів, як описано нижче:

Використання grep введіть тут опис зображення

Використання ack введіть тут опис зображення


2

Відповідь Ігнасіо чудова і допомогла мені знайти файли, що містять певний текст. Єдине питання, з яким я стикався, це те, що при виконанні цієї команди будуть перераховані всі файли, в тому числі і той, де шаблон не відображався.

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, оскільки воно скаже Дозвіл відхилений для багатьох файлів.
— jpaugh

(1) Якщо ви отримуєте No such file or directoryповідомлення для файлів, які існують, або ви робите щось не так, або ваша система зламана. (2) Що стосується [PATH OF PARENT]нічого?
— G-Man

@ G-Man Я відредагував відповідь, щоб показати [PATH OF DIRECTORY]лише випадковість, коли хтось незнайомий хотів дізнатися, чому я поставив./
— CP3O

@ G-Man Я використовую mac не Ubuntu, не впевнений, як моя система буде зламана, я ледве нічого на цьому не зробив.
— CP3O
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.