Mencari Berkas

Mencari berkas berdasarkan nama, tipe, ukuran, dan waktu dengan find, ditambah locate.

Daftar isi

Topik ini membahas pencarian berkas dari terminal dengan find, mulai dari kriteria nama, tipe, ukuran, sampai waktu perubahan, ditambah locate sebagai alternatif yang bekerja dari basis data. find menelusuri pohon direktori secara langsung setiap kali dipanggil, sehingga hasilnya selalu menggambarkan kondisi terkini. Setelah membacanya, berkas yang dicari dapat dilacak dengan kriteria yang tepat alih-alih dengan menebak-nebak nama direktorinya.

Struktur dasar find#

Bentuk dasar perintahnya adalah find jalur ekspresi. Argumen pertama menentukan titik awal penelusuran, sedangkan ekspresi berisi kriteria dan tindakan yang menyertainya. Tanpa kriteria apa pun, find mencetak seluruh jalur yang ditemukan di bawah titik awal, termasuk nama-nama direktorinya. Tanda titik dipakai sebagai titik awal untuk menyatakan direktori saat ini.

bash
# siapkan direktori kerja yang bersih
rm -rf /tmp/kerja-mencari-berkas
mkdir -p /tmp/kerja-mencari-berkas
cd /tmp/kerja-mencari-berkas
bash
# bangun pohon contoh
mkdir -p dokumen/2024 dokumen/2025 foto/libur
touch dokumen/catatan.txt dokumen/2024/laporan-akhir.pdf dokumen/2025/laporan-q1.pdf foto/libur/pantai.jpg
# find tanpa kriteria menampilkan seluruh isi pohon
find .
text Keluaran
.
./foto
./foto/libur
./foto/libur/pantai.jpg
./dokumen
./dokumen/2025
./dokumen/2025/laporan-q1.pdf
./dokumen/2024
./dokumen/2024/laporan-akhir.pdf
./dokumen/catatan.txt

Setiap baris keluaran adalah satu jalur yang ditemukan, diawali ./ karena penelusurannya mulai dari direktori saat ini. Urutan baris mengikuti urutan penelusuran pohon, yaitu masuk sedalam mungkin pada satu cabang sebelum pindah ke cabang berikutnya, bukan urutan alfabetis. Direktori ikut tercantum karena find menganggapnya sama pentingnya dengan berkas. Beberapa kriteria juga boleh dirangkai dalam satu perintah, dan semuanya digabung dengan logika DAN (AND), sehingga sebuah berkas hanya tampil apabila lolos seluruh kriteria.

Mencari berdasarkan nama dan tipe#

Kriteria -name menyaring berdasarkan pola nama, sedangkan -type menyaring berdasarkan jenisnya, misalnya f untuk berkas biasa dan d untuk direktori. Pola nama yang mengandung karakter wildcard (karakter pengganti seperti *) wajib ditulis dalam tanda kutip agar peluasan polanya dikerjakan oleh find, bukan oleh shell. Opsi -iname adalah varian yang tidak membedakan huruf besar dan huruf kecil.

bash
# cari berkas yang namanya mengandung laporan
find . -name "*laporan*"
# pencarian nama yang tidak membedakan huruf besar-kecil
find . -iname "*.PDF"
# cari hanya direktori
find . -type d
text Keluaran
./dokumen/2025/laporan-q1.pdf
./dokumen/2024/laporan-akhir.pdf
./dokumen/2025/laporan-q1.pdf
./dokumen/2024/laporan-akhir.pdf
.
./foto
./foto/libur
./dokumen
./dokumen/2025
./dokumen/2024

Dua berkas PDF ditemukan oleh -name "*laporan*" meskipun polanya ditulis dengan huruf kecil, karena nama aslinya memang berhuruf kecil. Sebaliknya, pola *.PDF berhasil hanya karena memakai -iname, sedangkan find . -name "*.PDF" tidak akan menemukan apa pun pada pohon ini. Kriteria -type d menyaring keluaran hingga tersisa direktorinya saja.

Mencari berdasarkan ukuran#

Kriteria -size menyaring berdasarkan ukuran dengan akhiran satuan, yaitu c untuk byte, k untuk kibibyte, M untuk mebibyte, dan G untuk gibibyte. Tanda + berarti lebih besar dari nilai tersebut, sedangkan tanda - berarti lebih kecil. Tanpa tanda apa pun, pencocokan dilakukan terhadap nilai yang dibulatkan ke atas menurut satuannya.

bash
# buat berkas berukuran 2 mebibyte dan 512 kibibyte
truncate -s 2M besar.bin
truncate -s 512K sedang.bin
# cari berkas yang ukurannya lebih dari 1 mebibyte
find . -type f -size +1M
# cari seluruh berkas yang kosong
find . -type f -empty
text Keluaran
./besar.bin
./foto/libur/pantai.jpg
./dokumen/2025/laporan-q1.pdf
./dokumen/2024/laporan-akhir.pdf
./dokumen/catatan.txt

Berkas besar.bin berukuran tepat dua mebibyte sehingga lolos saringan +1M, sedangkan sedang.bin yang berukuran 512 kibibyte tidak lolos. Kriteria -empty bekerja seperti -size 0c dan menemukan berkas kosong, yang biasanya merupakan sisa perintah touch atau program yang berhenti sebelum sempat menulis. Saringan seperti ini sering dipakai untuk membereskan berkas kosong yang menumpuk.

Mencari berdasarkan waktu#

Kriteria waktu memakai -mtime untuk satuan hari dan -mmin untuk satuan menit, keduanya menghitung usia sejak perubahan isi terakhir. Angka tanpa tanda berarti tepat satu satuan usia setelah pembulatan, tanda - berarti lebih baru daripada itu, dan tanda + berarti lebih tua. Selain menghitung usia, kriteria -newer membandingkan hasil penelusuran dengan berkas rujukan tertentu.

bash
# cari berkas yang berubah dalam sepekan terakhir
find . -type f -mtime -7
# catat ulang waktu rujukan pada salah satu berkas
touch dokumen/2025/laporan-q1.pdf
sleep 1
# buat berkas baru setelah waktu rujukan
echo "keluar" > hasil.txt
# hanya berkas yang lebih baru daripada rujukan yang tampil
find . -type f -newer dokumen/2025/laporan-q1.pdf
text Keluaran
./foto/libur/pantai.jpg
./besar.bin
./dokumen/2025/laporan-q1.pdf
./dokumen/2024/laporan-akhir.pdf
./dokumen/catatan.txt
./sedang.bin
./hasil.txt

Seluruh berkas contoh baru dibuat beberapa saat sebelum pencarian, sehingga semuanya lolos saringan -mtime -7. Berkas hasil.txt adalah satu-satunya yang lebih baru daripada rujukan laporan-q1.pdf, karena waktunya dicatat ulang oleh touch sebelum hasil.txt dibuat. Pola rujukan semacam ini berguna untuk mencari segala sesuatu yang berubah sejak suatu peristiwa.

Mencari lebih cepat dengan locate#

Pencarian dengan find yang mencakup seluruh disk bisa memakan waktu lama karena pohon direktorinya harus ditelusuri secara nyata. Perintah locate mengatasi kelemahan itu dengan bekerja dari basis data indeks nama berkas yang dibangun oleh updatedb, sehingga jawabannya hampir seketika. Konsekuensinya, hasil locate dapat kedaluwarsa: berkas yang baru dibuat belum terdaftar sampai basis datanya diperbarui. Pada Ubuntu, pembaruan tersebut dijalankan secara otomatis oleh plocate melalui timer systemd.

bash
# tidak-dijalankan
# locate tidak terpasang di sandbox; pada Ubuntu, perintah ini disediakan paket plocate
locate laporan.pdf

Apabila locate terpasang, perintah pada blok di atas mencetak seluruh jalur yang mengandung laporan.pdf dari indeksnya. Pencarian dengan locate paling cocok untuk berkas yang sudah lama ada, sedangkan berkas yang baru dibuat tetap harus dicari dengan find.

Kesalahan umum#

Kesalahan pertama adalah menulis pola -name tanpa tanda kutip, misalnya find . -name *.txt. Shell meluaskan pola itu lebih dahulu, sehingga find menerima daftar nama berkas di direktori saat ini alih-alih polanya, dan hasil pencarian menjadi kosong atau menyesatkan. Kebiasaan yang benar adalah selalu mengapit pola dengan tanda kutip.

Kesalahan kedua adalah mencari tanpa menyebutkan jalur, karena find memakai direktori saat ini sebagai titik awalnya. Di dalam direktori yang besar, keluaran yang melimpah menyulitkan pembacaan, dan pencarian yang tidak disengaja atas seluruh home bisa berlangsung lama. Titik awal yang eksplisit, misalnya find /var/log -name "*.log", membuat hasilnya terkendali.

Kesalahan ketiga menyangkut satuan ukuran. Angka -size tanpa akhiran berarti blok 512 byte, bukan byte, sehingga find . -size +10 bukan berarti berkas lebih besar dari 10 byte. Selalu sertakan akhiran seperti c, k, M, atau G agar maksudnya tegas. Terakhir, jangan mengandalkan locate untuk berkas yang baru dibuat, karena indeksnya baru diperbarui pada jadwal updatedb, dan panggilan updatedb sendiri memerlukan hak root.

Ringkasan#

  • find menelusuri pohon secara nyata dengan bentuk find jalur ekspresi, sehingga hasilnya selalu terkini.
  • Kriteria -name, -type, -size, dan -mtime atau -mmin dapat dirangkai dalam satu perintah untuk menyaring hasil secara berlapis.
  • Pola -name wajib dikutip agar peluasannya dikerjakan find, dan akhiran satuan pada -size wajib ditulis agar maknanya tegas.
  • locate menjawab dari indeks updatedb sehingga jauh lebih cepat, tetapi hasilnya dapat kedaluwarsa untuk berkas yang baru ada.

Referensi#