Mengapa find
Tidak Mengembalikan Hasil yang Diharapkan? Ini Cara Memperbaikinya
Jika Anda pernah menjalankan perintah find
di sistem berbasis Unix Anda, Anda mungkin pernah mengalami situasi frustasi di mana perintah tersebut gagal menemukan file-file yang Anda tahu ada. Misalnya, Anda mungkin ingin mencari file skrip shell, dan meskipun Anda yakin file tersebut ada, hasilnya kosong. Masalah umum ini sering kali muncul dari kesalahpahaman tentang bagaimana perintah find
menginterpretasikan karakter wildcard. Mari kita telusuri masalah ini dan temukan solusi yang bisa mengembalikan pencarian Anda ke jalur yang benar.
Masalah: find
Tidak Bekerja Sesuai Harapan
Pertimbangkan perintah ini yang mungkin sudah Anda coba:
$ find /usr -name *.sh
Perintah ini dimaksudkan untuk mencari semua file dengan ekstensi .sh
di direktori /usr
. Namun, jika Anda menemukan bahwa tidak ada hasil yang muncul, Anda mungkin bertanya, Mengapa find
tidak berfungsi?
Anda tahu skrip-skrip itu ada; misalnya, ketika Anda menjalankan:
$ ls /usr/local/lib/*.sh
Anda dapat melihat file seperti tclConfig.sh
dan tkConfig.sh
. Lalu, apa yang salah dengan perintah find
Anda?
Memahami Masalah
Masalah utama yang dihadapi adalah bagaimana shell perintah menginterpretasikan wildcard *.sh
. Secara khusus, jika ada file di direktori Anda saat ini yang cocok dengan *.sh
, shell akan memperluas wildcard itu sebelum find
memiliki kesempatan untuk bertindak. Ini dapat menyebabkan perilaku yang tidak terduga:
-
Ekspansi Wildcard
- Jika file
.sh
ada di direktori saat ini, misalnya,tkConfig.sh
, mengetikfind /usr -name *.sh
akan memperluasnya menjadifind /usr -name tkConfig.sh
, yang secara efektif membatasi pencarian Anda hanya untuk file itu saja.
- Jika file
-
Kesalahan Sintaks
- Jika banyak file yang cocok,
find
mungkin mengeluarkan kesalahan sintaks karena argumen yang ambigu:find: bad option tkConfig.sh
- Jika banyak file yang cocok,
Solusi 1: Mengutip Wildcard
Untuk mencegah shell memperluas wildcard sebelum diserahkan ke find
, Anda dapat mengutip karakter wildcard:
- Gunakan tanda kutip ganda:
$ find /usr -name "*.sh"
- Atau gunakan tanda kutip tunggal:
$ find /usr -name '*.sh'
Dengan mengutip *.sh
, Anda memberi tahu shell untuk meneruskannya apa adanya ke find
, sehingga memungkinkannya untuk mencari semua file .sh
di direktori yang ditentukan.
Solusi 2: Mengikuti Symlink
Alasan lain mengapa find
mungkin tidak berfungsi seperti yang diharapkan adalah keberadaan tautan simbolis di direktori /usr
atau subdirektorinya. Secara default, find
tidak mengikuti tautan simbolis. Jika Anda menduga ini menjadi masalah, Anda dapat menggunakan opsi -follow
:
$ find /usr -follow -name '*.sh'
Perintah ini memungkinkan find
untuk menjelajahi tautan simbolis dan mencari file yang diinginkan.
Kesimpulan
Sebagai kesimpulan, jika Anda menemukan bahwa perintah find
tidak menghasilkan hasil yang diharapkan saat mencari skrip shell, kemungkinan besar disebabkan oleh ekspansi wildcard atau keberadaan tautan simbolis. Selalu ingat untuk mengutip wildcard Anda untuk mencegah ekspansi yang prematur dan, jika perlu, gunakan opsi -follow
. Dengan menerapkan strategi ini, Anda dapat berhasil menemukan skrip shell Anda dan meningkatkan keterampilan baris perintah Anda!
Selamat Mencari!
Sekarang Anda siap mengatasi perintah find
dengan percaya diri! Jika Anda memiliki pertanyaan atau masalah lebih lanjut, silakan tinggalkan di kolom komentar di bawah.