Как да търсите текст в множество файлове в Linux

Кратък отговор

Търсене в текстови файлове: Използвайте grep или ripgrep за обикновен текст, код, регистрационни файлове и конфигурационни файлове.
Търсене в документи: Използвайте настолно приложение за PDF, Word, Excel, LibreOffice и други формати.
Ако вместо това търсите файл по име: Използвайте find или locate.

 

Тествах широк набор от команди и приложения за търсене на файлове в Linux — много повече от разгледаните тук — и избрах най-практичните и ефективни методи. Тествах примерите в Ubuntu със същата колекция от TXT, PDF, ODT, DOCX и други файлове, използвана в цялата статия.

 

Използвайте таблицата по-долу, за да изберете първо подходящия метод, след което преминете към съответния раздел.

 

 

Кой метод за търсене в Linux да използвате?

 

Най-добрият метод зависи главно от типа файлове, в които трябва да търсите.

 

Задача Най-добра опция
Търсене в текстови файлове със стандартна команда на Linux grep
Бързо търсене в текстови файлове в големи папки ripgrep
Намиране на файл по име, а не по съдържание find или locate
Търсене в PDF, Word, LibreOffice, Excel и други документи SeekFast
Използване на безплатен инструмент с отворен код за индексирано търсене в документи Recoll или DocFetcher

 

Инструментите grep и ripgrep търсят в съдържанието на текстови файлове, а find и locate търсят имена и пътища на файлове. Тези инструменти са отлични за технически файлове, но не търсят надеждно в сложни формати на документи. Ето защо правилният избор за папка, пълна с документи, е различен от правилния избор за папка, пълна с регистрационни файлове или код.

 

 

Търсене на текст във файлове с командата grep

 

Командата grep е стандартният инструмент на Linux за намиране на текст във файлове. Тя е най-подходяща за обикновен текст, изходен код, регистрационни файлове, CSV файлове, Markdown файлове и конфигурационни файлове.

 

За да потърсите дума във файловете .txt в текущата папка, използвайте:

grep "budget" *.txt

 

За да търсите в папка и всичките ѝ подпапки, използвайте рекурсивно търсене:

grep -R "budget" ~/Documents/stories

 

На практика обикновено добавям номера на редовете и имена на файловете, защото така резултатите са по-лесни за използване:

grep -RIn "budget" ~/Documents/stories

 

Ето какво означават опциите:

  • -R търси рекурсивно в папките.
  • -I пропуска двоичните файлове.
  • -n показва номерата на редовете.
Recursive grep search for budget in text files on Linux, with an arrow highlighting the command

 

Търсене без значение на главни и малки букви

За да пренебрегнете разликите между главни и малки букви, добавете -i:

grep -RIn -i "report" ~/Documents/stories

 

Това може да намери „report“, „Report“ и „REPORT“.

 

Търсене само на цели думи

За да намерите съвпадение с цяла дума, добавете -w:

grep -RIn -w "policy" ~/Documents/stories

 

Така се избягват съвпадения в по-дълги думи като „policyholder“.

 

Търсене само в определени типове файлове

За да търсите само във файлове с определено разширение, използвайте --include:

grep -RIn --include="*.txt" "budget" ~/Documents/stories

 

За няколко разширения повторете опцията:

grep -RIn --include="*.txt" --include="*.md" "budget" ~/Documents/stories

 

Това е полезно за папки, които съдържат много типове файлове, когато искате да търсите само в текстови файлове.

 

Изключване на папки от търсенето

Големите папки често съдържат директории, в които не искате да търсите, като archive, drafts или резервни копия. Можете да ги изключите по следния начин:

grep -RIn --exclude-dir="archive" --exclude-dir="drafts" "risk" ~/Documents/stories

 

Така резултатите остават по-прегледни и търсенето може да стане много по-бързо.

 

Търсене на точна фраза или на няколко низа

За точна фраза я поставете в кавички:

grep -RIn "sales report" ~/Documents/stories

 

За да търсите някой от няколко низа, добавете по една опция -e за всеки низ:

grep -RIn -e "sales" -e "budget" -e "payment" ~/Documents/stories

 

Можете също да използвате разширени регулярни изрази с -E:

grep -RInE "customer|product|service" ~/Documents/stories

 

И двете команди намират ред, съдържащ поне един от низовете. Ако са ви необходими файлове, които съдържат едновременно „sales“ и „payment“, дори на различни редове, филтрирайте имената на файловете на две стъпки:

grep -RIlZ "sales" ~/Documents/stories | xargs -0 -r grep -Il "payment"

grep search for sales, budget, and payment with file and directory filters on Linux

Това са най-често използваните случаи на командата grep. За пълна справка вижте ръководството за GNU grep.

 

Когато grep не е достатъчен

Командата grep е мощна, но все пак е инструмент за търсене в обикновен текст. Обикновено работи добре с файлове, съхранявани като четим текст. Тя не е добро универсално решение за документи на Word, електронни таблици на Excel, файлове на LibreOffice, PDF файлове, електронни книги или други формати на документи.

 

Ако се опитате да използвате grep в папка, пълна с различни видове документи, често ще пропуснете важни съвпадения или ще получите нечетлив изход. В такива случаи преминете направо към инструментите за търсене в документи.

 

 

Използване на ripgrep за по-бързо търсене от командния ред

 

Инструментът ripgrep, който обикновено се стартира като rg, е съвременен инструмент за търсене от командния ред. Официалното ръководство за ripgrep обяснява, че той по подразбиране търси рекурсивно в директориите и прилага автоматично филтриране. При рекурсивни търсения в големи папки с код и текст той често е по-бърз от стандартния grep.

 

За да търсите в текущата папка и нейните подпапки, използвайте:

rg "budget"

 

За да търсите в конкретна папка:

rg "budget" ~/Documents/stories

 

За да търсите само в определени типове файлове:

rg "budget" -g "*.txt" ~/Documents/stories

 

Инструментът ripgrep също спазва .gitignore по подразбиране, което е полезно в проекти с изходен код, защото автоматично пропуска много генерирани или несъществени файлове.

 

Използвайте ripgrep, когато търсите в код, регистрационни файлове, Markdown, конфигурационни файлове или друг обикновен текст. За PDF, Word, LibreOffice, Excel и други документи използвайте инструмент за търсене в документи.

ripgrep search for sales, marketing, and customer in a Linux folder

 

Кое да използвате: grep или ripgrep?

И двата инструмента търсят в съдържание от обикновен текст, но са подходящи за малко по-различни работни процеси:

  • Използвайте grep като стандартна команда, която вече е налична в почти всяка система с Linux.
  • Използвайте ripgrep за бързо рекурсивно търсене в хранилища с код и големи текстови папки.
  • Инструментът ripgrep търси в подпапките по подразбиране и спазва .gitignore, докато командата grep изисква опции за рекурсивно търсене и търси по-буквално, освен ако не изключите определени пътища.
  • За PDF, Word, Excel, LibreOffice и други сложни формати на документи използвайте инструмент за търсене в документи вместо която и да е от двете команди.

 

Как да инсталирате ripgrep в Ubuntu, Mint, Fedora, Debian и други дистрибуции на Linux

Командите за търсене с ripgrep са еднакви във всички дистрибуции на Linux. Единствено командата за инсталиране се променя според мениджъра на пакети. Командите по-долу следват официалните инструкции за инсталиране на ripgrep.

 

Дистрибуция Инсталиране на ripgrep
Ubuntu, Linux Mint, Debian sudo apt install ripgrep
Fedora sudo dnf install ripgrep
openSUSE sudo zypper install ripgrep
Arch Linux sudo pacman -S ripgrep

 

 

Намиране на файлове и директории по име в Linux

 

Ако знаете цялото или част от името на файла, използвайте командата find. Ръководството за GNU Findutils описва филтрите за име на файл, време, размер и други характеристики. Командата не търси в текста, съхраняван във файловете; за това използвайте grep или ripgrep.

 

За да намерите файлове, чиито имена съдържат определена дума, в папката stories и нейните подпапки, използвайте:

find ~/Documents/stories -type f -iname "*profit*"

 

Използвайте -iname за частично съвпадение без значение на главни и малки букви:

find ~/Documents/stories -type f -iname "*shopping*"

 

Звездичките съответстват на произволни знаци преди или след „shopping“. За да намерите директория вместо файл, променете -type f на -type d:

find ~/Documents/stories -type d -iname "*archive*"

 

Можете също да филтрирате файловете по разширение, дата на промяна или размер:

find ~/Documents/stories -type f -iname "*.pdf"

find ~/Documents/stories -type f -mtime -7

find ~/Documents/stories -type f -size +100M

 

Тези команди намират съответно PDF файлове, файлове, променени приблизително през последните седем дни, и файлове, по-големи от 100 MB.

 

По-бързо намиране на файлове с locate

Командата locate търси в база данни с имена на файлове, вместо всеки път да сканира файловата система, затова търсенето по име обикновено е много по-бързо, отколкото с find. Ръководството за plocate обяснява как работи това индексирано търсене:

locate -i "profit"

 

Тъй като locate използва индекс, съвсем новите файлове може да не се появят, докато базата данни не бъде актуализирана. В системи, в които имате разрешение да я обновите, използвайте:

sudo updatedb

 

Използвайте find, когато са ви необходими актуални резултати или подробни филтри. Използвайте locate, когато искате най-бързия начин да намерите съществуващо име на файл в индексирани местоположения.

Comparison of find and locate commands for filenames containing profit on Linux

 

Какво всъщност претърсва всеки метод за търсене в LinuxРазличните инструменти претърсват различни нива на вашите файлове.
Four searchable layers in Linux with find, locate, grep, ripgrep, SeekFast, Recoll, DocFetcher, and ChatGPT

 

Най-добрите инструменти за търсене в документи за Linux

 

Инструментите grep и ripgrep са предназначени за обикновен текст. За да търсите в PDF, Word, Excel, LibreOffice, електронни книги и други формати, използвайте някое от приложенията за търсене в документи по-долу; сканираните PDF файлове, съдържащи само изображения, първо изискват OCR.

 

SeekFast е много подходящ, когато искате да търсите в папки с различни типове документи, да преглеждате изреченията със съвпадения и да виждате резултати, подредени по релевантност, без да работите в терминала. Той е особено удобен, когато трябва да търсите в нова или често променяща се папка.

 

Recoll и DocFetcher са добър избор, ако предпочитате безплатен софтуер с отворен код и нямате нищо против предварително да създадете индекс. Индексирането изисква известна подготовка, но може да направи многократните търсения в установена колекция от документи по-практични.

 

Настолното приложение ChatGPT използва различен подход. То може да работи с избрани от вас папки, да отговаря на въпроси на естествен език, да сравнява файлове и да обобщава резултатите. Най-добре е да се използва като допълнение, когато трябва да разберете информацията, а не като единствен инструмент за изчерпателно търсене на точни съвпадения.

 

 

SeekFast

 

SeekFast е инструмент за търсене в документи за Windows, macOS и Linux. Той е предназначен за търсене в големи колекции от документи, а не само в обикновени текстови файлове от терминала.

 

Основното предимство е удобството. Избирате папка, въвеждате думите за търсене и виждате изреченията със съвпадения, преди да отворите всеки файл. Това е полезно, когато не знаете точното име на файла и трябва да търсите в много документи.

SeekFast search for company and sales across PDF, TXT, and DOCX files on Linux

SeekFast е особено полезен, когато папката ви съдържа различни типове документи, защото може да търси в много формати и да подрежда резултатите по релевантност. Това го доближава повече до търсенето в интернет, отколкото до традиционното търсене на точни съвпадения във файлове.

 

Основните функции включват:

  • Търсене в документи – търсене в над 120 поддържани файлови формата, включително PDF, Word, LibreOffice, Excel, текстови файлове и електронни книги.
  • Предварителен преглед на изреченията със съвпадения – виждате съответния текст, преди да отворите файла.
  • Резултати, подредени по релевантност – файловете с по-добри съвпадения се показват по-напред в резултатите.
  • Търсене по няколко ключови думи – намирате документи дори когато думите не са една до друга.
  • Графичен работен процес – не е необходимо да съставяте терминални команди за обичайните задачи за търсене в документи.

 

Предимства

  • Много по-удобен от grep за папки с реални документи.
  • Работи добре, когато помните думи от документа, но не и името на файла.
  • Показва контекст, за да можете да оцените резултатите, преди да отворите файловете.
  • Полезен за смесени папки с PDF, Office, LibreOffice, текстови и други формати.

 

Недостатъци

  • Безплатната версия на SeekFast е ограничена до търсене в не повече от 50 файла наведнъж.
  • Не е предназначен да замени grep или ripgrep при търсене в изходен код.
  • Не поддържа разширени работни процеси с регулярни изрази като специализираните инструменти от командния ред.

 

Ако основната ви задача е да търсите в много документи, а не в код или регистрационни файлове, изтеглете SeekFast и го изпробвайте с някоя от папките си с документи.

 

 

Recoll

 

Recoll е безплатен настолен инструмент за търсене с отворен код за Linux и други Unix-подобни системи. Той използва индекс, което означава, че първо сканира избраните от вас папки, а след това ви позволява да търсите бързо в тях.

Recoll search results for business across TXT, PDF, and DOCX files on Linux

Поддръжката на някои формати на документи зависи от помощните приложения, инсталирани в системата ви. Това е добър избор, ако искате настолен инструмент с отворен код за индексирано търсене и нямате нищо против да отделите време за конфигурирането му.

 

Предимства

  • Безплатен и с отворен код.
  • Работи добре като индексиран настолен инструмент за търсене в Linux.
  • Може да търси в много формати на документи с подходящите помощни програми.

 

Недостатъци

  • Първоначалното индексиране и конфигуриране може да отнемат време.
  • Работният процес може да изглежда твърде технически за обикновените потребители.
  • Поддръжката на формати на документи може да зависи от инсталираните системни пакети.

 

 

DocFetcher

 

DocFetcher е безплатно настолно приложение за търсене с отворен код за Linux, Windows и macOS. DocFetcher Pro е отделна платена версия с допълнителни функции. Подобно на Recoll, то работи чрез създаване на индекси за избраните от вас папки.

DocFetcher search results for business with a matching document preview on Linux

DocFetcher поддържа често срещани формати на документи като PDF, Microsoft Office, OpenDocument, HTML и обикновен текст. Той може да бъде полезен, когато искате безплатен инструмент за различни платформи и нямате нищо против да създавате индекси преди търсенето.

 

Предимства

  • Стандартното издание на DocFetcher е безплатно и с отворен код.
  • Предлага се за Linux, Windows и macOS.
  • Може да показва предварителен преглед на текст от индексираните документи.

 

Недостатъци

  • Изисква създаване на индекс, преди да можете да търсите в съдържанието на папка.
  • Интерфейсът изглежда по-остарял от този на много съвременни инструменти за търсене.
  • По-малко удобен е, ако често търсите еднократно в папки, без предварително да подготвяте индекс.

 

 

 

Настолното приложение ChatGPT се предлага като предварителна версия за поддържаните дистрибуции на Linux. То не е традиционна програма за търсене на файлове. Вместо това представлява работна среда с изкуствен интелект, която може да работи с файловете в избрани от вас папки.

 

За да го използвате с локални файлове, отворете локална папка в ChatGPT Work или Codex и предоставете достъп до файловете, които искате да използвате. След това можете да задавате въпроси на естествен език, като например:

  • „Намери документите, в които се обсъждат бизнес рискове.“
  • „Сравни отчетите за продажбите и покажи най-важните разлики.“
  • „Намери информацията, свързана с този проект, и я обобщи.“
Codex in the ChatGPT desktop app summarizing business risks from local files on Linux

Този подход е най-полезен, когато не помните точната формулировка. ChatGPT може да помогне при търсене по смисъл, да свързва информация от няколко файла, да обобщава намереното и да обяснява резултатите. Codex може също да търси и анализира проекти с изходен код.

 

Предимства

  • Приема въпроси на естествен език, а не само ключови думи или регулярни изрази.
  • Може да обобщава, сравнява и тълкува информация от множество файлове.
  • Полезно е, когато следващата стъпка е да разберете резултатите, а не само да намерите дадена фраза.

 

Недостатъци

  • Не е предназначено да гарантира намирането на всяко точно срещане, затова използвайте grep или ripgrep, когато изчерпателността е от значение.
  • Не предлага същия специализиран работен процес за индексирано търсене като SeekFast, Recoll или DocFetcher.
  • Версията за Linux все още е предварителна и официално поддържа само избрани дистрибуции.
  • Изисква акаунт в ChatGPT и използва онлайн услуги, вместо да работи изцяло офлайн. Прегледайте как OpenAI използва данните от ChatGPT и Codex, както и изискванията си за поверителност, преди да го използвате с чувствителни документи.

 

Използвайте ChatGPT като допълнение към традиционните инструменти за търсене: grep и ripgrep са по-подходящи за търсене на точен текст, приложенията за търсене в документи са по-подходящи за преглеждане на колекции с предвидими резултати, а ChatGPT е полезен, когато искате да разберете, сравните или обобщите намерената информация.

 

 

Заключение

 

В тази статия споделих методите, които дадоха най-добри резултати в тестовете ми за намиране на файлове и търсене в съдържанието им в Linux. Потребителите на Linux обаче често имат свои предпочитани инструменти и работни процеси. Кой метод използвате вие? Пропуснал ли съм полезна команда или приложение?

 

Можете да споделите опита си по един от следните начини:

 

 

Често задавани въпроси

 

1. Как да намеря файл по име в Linux?
Използвайте командата find. Например:

find ~/Documents/stories -type f -iname "*profit*"

Това претърсва папката stories и нейните подпапки за имена на файлове, съдържащи „profit“, без значение на главните и малките букви.

 

2. Каква е разликата между find и grep?
Командата find търси имена на файлове, пътища и свойства на файлове. Командата grep търси текст, съхраняван във файлове с обикновен текст. Ако знаете името на файла, използвайте find; ако помните думи от файла, използвайте grep или инструмент за търсене в документи.

 

3. Трябва ли да използвам find или locate?
Използвайте find за актуални резултати и подробни филтри. Използвайте locate за по-бързо търсене на име на файл от предварително създаден индекс. Новосъздадените файлове може да не се показват в locate, докато базата му данни не бъде актуализирана.

 

4. Как да търся текст във всички файлове в папка на Linux?
Командата grep -R е стандартният избор. Например:

grep -RIn "budget" ~/Documents/stories

Това работи най-добре за файлове с обикновен текст, изходен код, регистрационни файлове и конфигурационни файлове.

 

5. Как да търся и в подпапките?
Използвайте рекурсивно търсене с grep -R:

grep -RIn "budget" ~/Documents/stories

Тази команда претърсва папката stories и нейните подпапки, пропуска двоичните файлове и показва номерата на редовете.

 

6. Как да търся само в определени типове файлове?
Използвайте --include. Например:

grep -RIn --include="*.txt" "budget" ~/Documents/stories

Можете да повторите --include за няколко разширения.

 

7. Как да изключа папки от търсенето с grep?
Използвайте --exclude-dir. Например:

grep -RIn --exclude-dir="archive" --exclude-dir="drafts" "risk" ~/Documents/stories

 

8. Как да търся няколко възможни думи?
Добавете по една опция -e за всеки низ. Например:

grep -RIn -e "sales" -e "budget" -e "payment" ~/Documents/stories

Това намира редове, съдържащи някой от низовете.

 

9. По-добър ли е ripgrep от grep?
Инструментът ripgrep често е по-бърз и по-удобен за рекурсивно търсене в големи папки с код и текст, докато командата grep е налична по подразбиране в почти всяка система с Linux и е идеална за обикновено търсене в текст. Нито един от двата инструмента не е универсален инструмент за търсене в документи.

 

10. Защо grep не намира текст в моите PDF или Word файлове?
Командата grep е предназначена за обикновен текст. PDF, Word, LibreOffice и Excel файловете съхраняват текста в по-сложни формати, затова grep може да пропуска съвпадения или да показва нечетлив изход. За тези файлове използвайте инструмент за търсене в документи.

 

11. Кой е най-добрият начин за търсене в PDF, Word и LibreOffice файлове в Linux?
Използвайте инструмент за търсене, който разпознава форматите на документите. SeekFast е удобен, когато искате предварителен преглед и резултати, подредени по релевантност. Recoll и DocFetcher са добри алтернативи с отворен код, ако предпочитате индексирано настолно търсене.

 

12. Работи ли SeekFast в Linux?
Да. SeekFast има версия за Linux и може да се използва за търсене в много формати на документи чрез графичен интерфейс.

 

13. Трябва ли да използвам grep, ripgrep или SeekFast?
Използвайте grep за обикновено търсене в текстови файлове. Използвайте ripgrep за бързо рекурсивно търсене в папки с код и текст. Използвайте SeekFast, когато трябва да търсите в PDF, Word, LibreOffice, Excel и други документи с предварителен преглед.

За автора
Димитър Стаменов е софтуерен разработчик и предприемач от София, България. Завършил е Софийския университет и работи професионално в областта на софтуерната разработка от 2002 г. Той е основател, управител и водещ разработчик в Slaviana Soft и създател на SeekFast. Сред другите му дългогодишни проекти са Preslav ERP и SEORanks. Димитър е преподавал дисциплини, свързани със софтуера, както и SEO в Telerik Academy и Software University. За блога на SeekFast той лично тества софтуера и командите, за които пише, и черпи опит от ежеседмичната си работа, помагайки на потребителите да решават реални проблеми.

Оставете коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *