Төлем әдістері Abuse

Linux жүйесінде файлдарды мазмұн бойынша іздеу: ack және ripgrep

03.05.2023, 23:33

Linux жүйесінде файл мазмұнын іздеуді пайдалану үлкен және күрделі файлдық жүйелерде нақты ақпаратты іздеуге кететін уақыт пен күш-жігерді айтарлықтай азайтады.

Неліктен файлдарды мазмұны бойынша іздеу керек?

Бұл іздеу әсіресе белгілі бір жолды немесе кілт сөзді қамтитын файлдарды табу қажет болғанда немесе белгілі бір үлгіге немесе критерийге сәйкес келетін барлық файлдарды табу қажет болғанда пайдалы болуы мүмкін.

Мазмұн бойынша файлдарды іздеу әртүрлі тапсырмалар үшін пайдаланылуы мүмкін, мысалы:

  • үлкен мәтіндік файлдардағы арнайы мәтін
  • конфигурация файлдары мен арнайы параметрлерді немесе пәрмендерді қамтитын сценарийлер
  • пайдаланушы аттары немесе телефон нөмірлері сияқты арнайы деректерді қамтитын файлдар
  • файлдарды мазмұн түрі бойынша, мысалы, JPEG кескіндері немесе PDF құжаттары бар барлық файлдарды табу.

Файлдарды мазмұны бойынша іздеудің жалпы мақсаты – файлдық жүйемен жұмыс істеуді жеңілдету және файлдық жүйеде қажетті ақпаратты табу.

ак

Ack утилитасынан бастайық. Ол 2005 жылы grep-ке балама ретінде құрылды және тез арада әзірлеушілер арасында танымал болды.

Оның grep қарағанда бірнеше артықшылығы бар, соның ішінде:

  • Ақылдырақ файлдарды іздеу және алып тастау. Ack тек әдепкі бойынша мағынасы болуы мүмкін файлдарды іздейді, мысалы, .svn немесе .git қалталарын қоспағанда. Сіз өзіңіздің ережелеріңіз бен ерекшеліктеріңізді қоса аласыз;
  • әдепкі бойынша жасырын файлдар мен каталогтарды іздеу;
  • Ack барлық жерде, тіпті grep сияқты жүйелік қалталардан іздеуге тырыспайды. Бұл жүйеде жасырылған файлдарды оңай табуға болатынын білдіреді.

ack қолдану мысалдары:

  • Ағымдағы қалтадағы барлық файлдарды және оның құрамында "test": ack "test"
  • Дәл солай, бірақ .bak: ack "test" --ignore-file=match:/.bak$/
  • Ағымдағы қалтадағы «сәлем» жолын қамтитын барлық файлдарды табыңыз және әр файлдың алғашқы 2 жолын басып шығарыңыз: ack "hello" --heading --max-count=2

ripgrep

Екінші қызықты құрал - ripgrep. Ол көптеген жолдармен ack-ге ұқсас, бірақ жылдамырақ іздеу алгоритмін пайдаланады, бұл оны әсіресе үлкен жобалар үшін пайдалы етеді.

Міне, кейбір мысалдар:

  1. Ағымдағы қалтадағы барлық файлдарды және оның құрамында "test": rg "test"
  2. Дәл солай, бірақ .bak: rg "test" --glob "!*.bak"
  3. Ағымдағы қалтадағы «сәлем» жолын қамтитын барлық файлдарды табыңыз және әр файлдың алғашқы 2 жолын басып шығарыңыз: rg "hello" --heading --max-columns=2

Соңында, fzf туралы айту керек. Бұл ack және ripgrep сияқты жолды іздеу жүйесі ғана емес. Fzf файлдарды, қалталарды және тізімдегі элементтерді іздеуге арналған қызметтік бағдарлама ретінде пайдаланылады. Әйтпесе, ол ack/ripgrep сияқты жұмыс істейді, бірақ нәтижелерді тірі сүзгілеу мүмкіндігімен бірге. Міне, кейбір мысалдар:

  • Компьютерде F әрпінен басталатын файлдарды іздеңіз: locate F | fzf -m
  • Ағымдағы қалтадан шығып, мен қалаған каталогқа өтіңіз: cd **<TAB> | fzf
  • SVN түзетулерін таңдап, нөмірді алмасу буферіне көшіріңіз: svn log | fzf --reverse --ansi | awk '{print $1}' | pbcopy

Бұл құралдар сізге қажет файлдар мен жолдарды тез және тиімді табуға көмектеседі деп үміттенеміз. Қайсысын таңдасаңыз да, олардың барлығы жұмысыңызды айтарлықтай жылдамдататын кеңейтілген іздеуді ұсынады.