Mencari File & Teks — Terminal

Mencari File find — Cari File berdasarkan Kriteria # Cari file berdasarkan nama find . -name "*.js" # Cari semua file .js dari direktori saat ini ke bawah #…

Proyek yang tumbuh cepat punya ratusan file, dan kamu sering perlu mencari dua hal: file-nya di mana, dan baris mana yang menyebut sesuatu. Bayangin perpustakaan. Kalau kamu mencari buku dari judul di sampulnya, kamu pakai katalog: itu find, yang mencari dari nama file. Kalau kamu mencari halaman yang menyebut satu kata tertentu, kamu harus membuka isinya: itu grep, yang mencari teks di dalam file.

🧪 Tebakan cepat: di logs/app.log ada tiga baris berlabel ERROR. Berapa baris yang dicetak grep "error" logs/app.log? Tebak dulu, jawabannya ada di bagian "grep: cari teks di dalam file".

Contoh di bawah dijalankan di ~/proyek-web milik Budi: ada error.log, index.html, script.js, style.css, folder logs berisi app.log, dan folder src berisi main.js dan utils.js.

find: cari file berdasarkan nama

budi@laptop:~/proyek-web$ find . -name "*.log"
./error.log
./logs/app.log
budi@laptop:~/proyek-web$ find . -name "*.js"
./script.js
./src/main.js
./src/utils.js
budi@laptop:~/proyek-web$ find . -type d
.
./logs
./src

Kenapa pola find harus pakai tanda kutip

budi@laptop:~/proyek-web$ find . -name *.log
./error.log

Tanpa kutip, app.log hilang dari hasil. Penyebabnya shell, bukan find: sebelum perintah jalan, bash mengganti *.log dengan nama-nama yang cocok di folder sekarang. Di ~/proyek-web cuma ada error.log, jadi yang sampai ke find adalah find . -name error.log. Dengan tanda kutip, bash membiarkan *.log apa adanya, dan find yang mencocokkannya di semua subfolder.

grep: cari teks di dalam file

budi@laptop:~/proyek-web$ grep "error" logs/app.log
2026-10-08 09:02:03 ERROR database connection error
2026-10-08 09:06:45 ERROR email service error: connection refused
budi@laptop:~/proyek-web$ grep -i "error" logs/app.log
2026-10-08 09:02:03 ERROR database connection error
2026-10-08 09:04:02 ERROR payment timeout
2026-10-08 09:06:45 ERROR email service error: connection refused

Flag yang sering dipakai:

Flag Artinya Contoh hasil
-i Abaikan huruf besar-kecil 3 baris, bukan 2
-n Tampilkan nomor baris 7:2026-10-08 09:02:03 ERROR ...
-c Cuma hitung baris yang cocok grep -c -i "error" logs/app.log mencetak 3
-v Kebalikannya: baris yang gak cocok
-w Cocok sebagai kata utuh saja -w "log" gak cocok dengan login

grep -r: cari di semua file sekaligus

budi@laptop:~/proyek-web$ grep -r "TODO" .
./script.js:// TODO: add the order button
./src/main.js:// TODO: fetch the cake list from the API
budi@laptop:~/proyek-web$ grep -rl "TODO" .
./script.js
./src/main.js

💡 Sekilas: ripgrep

Banyak developer memasang rg (ripgrep), pencari yang mirip grep -r tapi jauh lebih cepat untuk proyek besar, dan otomatis melewati file yang ada di .gitignore, seperti node_modules. Pencarian di VS Code juga memakai ripgrep di belakangnya. Bentuknya mirip: rg "TODO", rg -i "error" logs.

⚠️ Jebakan yang sering ketemu

TL;DR: find mencari file dari namanya: find . -name "*.log" menemukan semua file berakhiran .log di folder ini dan semua subfolder-nya (-iname tanpa peduli huruf besar-kecil, -type f file, -type d folder), dan polanya wajib diberi tanda kutip supaya gak diganti shell duluan. grep mencari teks di dalam file dan mencetak setiap baris yang mengandungnya: -i abaikan besar-kecil, -n nomor baris, -c hitung, -v kebalikannya, -r semua file di folder, -l nama file saja. Nama file: find. Isi file: grep.

Yang akan kamu pelajari