8

Я использую Bash под Ubuntu.

В настоящее время это работает хорошо для текущего каталога:

catdoc *.doc | grep "specificword" 

Но у меня есть много подкаталогов с файлами .doc.

Как я могу найти, скажем, "конкретное слово" рекурсивно?

3 ответа3

10

Используйте find для рекурсивных поисков:

find -name '*.doc' -exec catdoc {} + | grep "specificword"

Это также выведет имя файла:

find -name '*.doc' | while read -r file; do
    catdoc "$file" | grep -H --label="$file" "specificword"
done

(Обычно я использую find ... -print0 | while read -rd "" file , но есть вероятность, что это будет .0001%, поэтому я перестал заботиться.)

5

Возможно, вы захотите взглянуть на recoll, который представляет собой инструмент полнотекстового поиска для систем Linux и Unix, поддерживающий множество различных форматов документов. Однако он основан на индексе, т. Е. Он должен индексировать документы, в которых вы хотите выполнить поиск, до фактического поиска. (Спасибо Пабуку за указание на это).

Есть графический интерфейс и командная строка тоже.

Смотрите документацию для получения дополнительной информации.

1

Grep должен найти двоичные совпадения с:

find /path/to/dir -name '*.doc' exec grep -l "specificword" {} \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .