Pernahkah Anda terjebak mencari file dan tidak dapat mengingat di mana Anda menyimpannya, apalagi nama file itu sendiri? Di Linux, Bash find
perintah akan membantu Anda menjelajahi sistem Anda untuk menemukan file itu.
Bash find
command di Linux menawarkan banyak cara untuk mencari file dan direktori. Dalam tutorial ini, Anda akan mempelajari bagaimana akses terakhir file, izin, dan lainnya dapat membantu menemukan file dan direktori dengan Bash find
memerintah. Mari kita mulai!
Prasyarat
Jika Anda ingin mengikuti berbagai demo dalam tutorial ini, pastikan Anda memiliki yang berikut:
- PC Linux – Tutorial ini menggunakan Ubuntu 20.04, tetapi semua distribusi Linux dapat berfungsi.
find
utility – Utilitas Bash find seharusnya sudah ada di semua distribusi Linux. Tutorial ini menggunakan v4.7.0.
Bash find
Perintah 101
Menemukan file memerlukan beberapa kriteria; bagian dari nama file, jenis file, izin pada file, dll. find
perintah memungkinkan Anda untuk menentukan kriteria tersebut untuk mempersempit file yang tepat yang ingin Anda temukan. Perintah find menemukan atau mencari juga tautan simbolik (symlink). Tautan simbolis adalah file pintasan Linux yang mengarah ke file atau folder lain di komputer Anda. Mari kita bahas cara paling dasar untuk menggunakan Bash find
perintah.
Mungkin Anda berada di direktori home Anda, mencari direktori bernama snap dan semua file dan subdirektori di bawahnya. Dalam hal ini, jalankan find
perintah, diikuti dengan nama direktori ("snap"
), dan hanya itu!
Karena tidak ada argumen baris perintah lain di bawah ini, Anda dapat melihat daftar file dan direktori yang ditemukan secara rekursif di dalam snap direktori.
find "snap"
Jika Anda tidak menentukan
name
parameter,find
akan menganggap argumen pertama seharusnya untukname
parameter, mis.,find "snap"
sama denganfind -name "snap
.”
Menemukan File dengan Pengujian (alias Filter)
Anda telah melihat bentuk paling dasar dari find
perintah dan cara kerjanya. Tetapi mungkin Anda ingin sedikit mempersempit pencarian untuk menentukan kriteria yang lebih spesifik. Jika demikian, Anda harus menerapkan tes. Tes adalah kriteria yang Anda berikan ke find
perintah.
Tes memberi tahu find
perintah untuk memfilter output berdasarkan banyak kriteria berbeda.
Menemukan File berdasarkan Nama File atau Direktori
Mungkin Anda hanya ingat bagaimana nama file dimulai, mungkin dengan cara yang tidak peka huruf besar-kecil. Dalam hal ini, Anda dapat menggunakan karakter pengganti untuk membantu mempersempit hasil.
# Find files and directories with names starting with 'snap'
find -name "snap*"
# Find files and directories with names starting with 'snap'
# in case insensitive manner (For example:'Snap', 'snap', 'SNaP', etc.)
find -iname "snap*"
Menemukan File dan Direktori menurut Jenis File
Seperti -name
uji, -type
test adalah cara lain yang efisien untuk menemukan file dan direktori. -type
test memungkinkan Anda memfilter hasil find
perintah oleh file atau direktori.
# Find a file named 'snap'
find "snap" -type f
# Find a directory named 'snap'
find "snap" -type d
Untuk lebih mempersempit pencarian file, gabungkan -name
dan -type
tes dengan menjalankan perintah di bawah ini.
find
perintah di bawah ini hanya mencari direktori (-type d
) dengan nama (-name
) yang dimulai dengan snap
.
find -name "snap*" -type d
Menemukan File dan Direktori dengan Pengujian dan Operator
Sekarang setelah Anda mempelajari dasar-dasar find
perintah dikombinasikan dengan tes, saatnya untuk meningkatkan pencarian file. Mungkin Anda perlu mencari file atau direktori yang cocok dengan lebih dari satu kondisi, seperti nama dan jenis file. Dalam hal ini, Anda perlu menggabungkan kondisi.
Saat Anda perlu menambahkan lebih dari satu kondisi untuk menemukan file, Anda dapat menggabungkan kondisi dengan operator. Operator adalah elemen yang memungkinkan Anda menggabungkan kondisi untuk membentuk pengujian/filter yang lebih kompleks.
Menggabungkan Dua Kondisi dengan -and
Operator
Mungkin Anda perlu menemukan beberapa file atau direktori yang cocok dengan nama tertentu dan Tipe. Untuk melakukannya, Anda dapat menggunakan -and
operator. -and
operator memungkinkan Anda untuk menggabungkan dua atau lebih ekspresi dan menampilkan hasilnya hanya jika perintah find mengembalikan nilai sebenarnya. Ekspresi adalah representasi dari kondisi tertentu, seperti saat memfilter file berdasarkan nama (-name "snap"
).
Untuk mendemonstrasikan bagaimana -and
operator menggabungkan dua kondisi, jalankan setiap perintah berikut.
# Find files only (-type f) and (-and) ensure the names (-name) start with snap
# in the current directory and subdirectories.
find -name "snap*" -and -type f
# Find directories only (-type d) and (-and) ensure the names (-name) start with snap
# in the current directory and subdirectories.
find -name "snap*" -and -type d
# Find files only (-type f) and (-and) ensure the names (-name) start with snap
find -name "snap" -and -type f
# Find directories only (-type d) and (-and) ensure the names (-name) start with snap
find -name "snap" -and -type d
Menggabungkan Dua Kondisi dengan -or
Operator
Seperti -and
operator, -or
operator (-o
) juga menggabungkan dua ekspresi terpisah. Perbedaannya adalah find
perintah akan menampilkan hasil meskipun hanya satu ekspresi yang benar.
Di bawah ini adalah sintaks dasar tentang cara menggabungkan dua kondisi dengan -or
operator. find
perintah mengeluarkan hasil meskipun hanya satu, baik expr1 atau expr2, mengembalikan nilai sebenarnya.
find -or
Mungkin Anda ingin mencari nama file menggunakan -name
parameter tipe tertentu menggunakan -type
parameter. Jika demikian, jalankan find
perintah di bawah ini untuk mencari file (-type f
) dengan nama (-name
) yang dimulai dengan snap
-or
chart
.
find -name "snap*" -type f -or -name "chart*"
Memfilter File dengan -not
Operator
Tidak seperti dua operator pertama tempat Anda memfilter konten yang Anda cari, -not
operator (!
) adalah sebaliknya. -not
operator mengecualikan file dan direktori yang tidak ingin Anda lihat di hasil penelusuran.
Mungkin Anda ingin mencari file hanya dengan nama yang tidak mulai dengan nama tertentu. Dalam hal ini, jalankan perintah berikut. Perhatikan find
perintah di bawah ini hanya mencari file (-type f
), dengan nama (-name
) yang jangan mulai dengan snap
.
find -not -name "snap*" -type f
Menemukan File dengan Mengelompokkan Ekspresi
Sekarang, Anda telah mempelajari cara menggunakan pengujian dan operator untuk memfilter find
hasil perintah. Tetapi bagaimana jika hasil target Anda agak rumit? Jika demikian, Anda perlu melihat ekspresi pengelompokan. Bash find
perintah memungkinkan Anda untuk mengelompokkan ekspresi yang berarti mendefinisikan dua atau lebih kondisi "set".
Mengelompokkan Ekspresi dengan Tanda kurung
Katakanlah Anda perlu mencari file atau direktori dengan nama yang berbeda. Anda akan segera menemukan tugas yang mustahil dengan menggunakan find
dasar-dasar perintah, seperti yang dibahas sebelumnya. Sebagai solusinya, Anda harus menggunakan tanda kurung untuk menggabungkan ekspresi untuk membentuk satu ekspresi kompleks.
Dalam contoh di bawah ini, find
perintah akan mencari file (-type f
) dengan .html
ekstensi atau direktori (-type d
) dengan nama yang dimulai dengan chart
.
Kurung buka dan tutup diloloskan dengan garis miring terbalik (
\
) untuk memungkinkan terminal membaca tanda kurung secara harfiah. Karakter escape memberitahufind
perintah untuk memperlakukan karakter secara harfiah.
find \( -name "*.html" -type f \) -or \( -name "chart*" -type d \)
Daripada menggunakan tanda kurung, Anda juga dapat menggunakan koma untuk mengelompokkan ekspresi seperti
find -name "snap*" -type d -delete, -name "chart*" -print
. Mengelompokkan ekspresi dengan koma pada dasarnya adalah serangkaian tugas yang berjalan dalam satu perintah.
Mencari File dari Direktori Induk
Dalam semua contoh sebelumnya, Bash find
perintah menemukan file hanya dari direktori kerja saat ini dan semua subdirektori. Tetapi mungkin Anda perlu memulai pencarian di direktori induk sebagai gantinya. Jika ya, berikan -depth
pilihan tembakan. -depth
parameter mencantumkan file dan direktori dalam urutan pertama, seperti yang ditunjukkan di bawah ini.
find
perintah di bawah ini mencantumkan konten dari direktori induk terlebih dahulu dan turun ke direktori kerja (snap
).
find "snap" -depth
Menemukan File dan Direktori dengan Izin
Alih-alih menemukan file yang difilter berdasarkan nama dan jenis, perintah find juga memungkinkan Anda menemukan file dan direktori yang difilter berdasarkan izin. Di Linux, setiap file dan folder memiliki izin khusus untuk pemilik, pemilik grup, dan pengguna lain. find
perintah memungkinkan Anda memanfaatkan izin tersebut untuk memfilter hasil pencarian untuk file dan direktori dengan -perm
pilihan.
Sebelum Anda mencoba mencari file dan direktori dengan kode
-perm
pilihan, Anda harus membiasakan diri dengan izin membaca. Izin menunjukkan siapa yang memiliki akses dan dapat mengubah file dan direktori tertentu.
Menemukan File melalui Mode Simbolik
Sekarang setelah Anda memahami konsep izin file, coba temukan file melalui mode simbolis. Mode simbolis menggunakan kombinasi huruf dan simbol untuk mewakili izin file.
Untuk mendemonstrasikan cara menemukan file melalui mode simbolis, jalankan setiap perintah berikut.
# Find only files (-type f) in the working directory (.)
# with read, write and execute permissions for user, group and others in the current
find . -perm u=rwx,g=rwx,o=rwx -type f
# Find files (-type f) in the working directory (.)
# with any of the read, write and execute permissions (not the exact)
# for user, group and others in the current
find . -perm -u=rwx,g=rwx,o=rwx -type f
# Find files (including hidden files) where either of the user, group or others
# have read, write and execute access to files in the working directory (.)
find . -perm /u=rwx,g=rwx,o=rwx -type f
Menemukan File dan Direktori melalui Mode Absolut
Jika Anda tidak suka menemukan file melalui mode simbolis, maka mode absolut dapat menarik minat Anda. Mode absolut menentukan izin dalam representasi numerik oktal vs. menggunakan huruf.
Di bawah ini Anda dapat melihat bahwa mode simbolis -rwxrwxrwx setara dengan mode absolut 777 .
Katakanlah Anda hanya ingin menemukan file dan direktori dengan izin hanya-baca untuk pengguna, grup, dan lainnya. Jika demikian, jalankan setiap perintah di bawah ini untuk melihat hasil yang akan Anda dapatkan saat menemukan file dan direktori melalui mode absolut.
# Find files and directories only with read-only permission
# for user, group and others in the working directory (.)
find . -perm 444
# Find files and directories only that have least the read-only permission
# for user, group and others in the working directory (.)
find . -perm -444
# Find files and directories only (including hidden files and directories)
# that have least the read-only permission
# for user, group and others in the working directory (.)
find . -perm /444
Ubah Hasil Pencarian dengan -print
Parameter
Alih-alih hanya menampilkan jalur file di hasil pencarian, mungkin Anda juga ingin melihat propertinya. Menggunakan -print
tindakan, Anda dapat mengubah output find
perintah menghasilkan.
-print
parameter adalah perilaku default saat Anda menjalankan find
perintah di mana ia mencetak hasil pencarian file, masing-masing pada baris baru. Jadi jalankan salah satu dari perintah di bawah ini ke find
file dan direktori bernama snap
, Anda akan mendapatkan hasil yang sama.
find -name "snap" -print
find -name "snap"
Menemukan dan Mencetak Nama File Tanpa Spasi Putih
Berbeda dengan -print
default parameter, -print0
opsi memungkinkan Anda menghapus spasi putih atau karakter baris baru dalam hasil penelusuran yang dikembalikan oleh find
memerintah. Terutama ketika Anda meneruskan hasilnya ke perintah lain seperti grep
untuk mencari pola.
Perintah di bawah ini memungkinkan Anda menemukan dan menampilkan direktori tanpa spasi putih atau karakter baris baru.
# Find a file or directory named 'snap', print the result
# removing white spaces and newline characters
find -name "snap" -print0
Menemukan dan Mencetak File dengan Properti melalui Pemformatan Cetak
Untuk mengubah format output, find
perintah juga memiliki -printf
parameter. Parameter ini memungkinkan Anda membuat arahan atau “pemformat” yang menentukan tampilan hasil penelusuran.
Mungkin Anda perlu menemukan file beserta propertinya seperti terakhir kali diakses. Jika sudah, jalankan perintah berikut.
# Find files only with names starting with 'snap', then print each file
# along with their last-time access properties, full path and filename
# each on a new line
find -name "snap*" -printf "%a %p \n"
# Find files with .html or .json extension
# then print each file owner's username, group name, full path and filename
# each on a new line
find \( -name "*.html" -type f \) -or -name "*.json" -printf "%u %g %p \n"
Di bawah ini adalah daftar arahan yang tersedia untuk bekerja berdampingan dengan -printf
tindakan:
%a
– Mengembalikan terakhir kali file diakses.%b
– Mengembalikan jumlah ruang disk yang digunakan untuk file dalam blok 512-byte.%d
– Mengembalikan kedalaman file di pohon direktori.%g
– Mengembalikan nama grup file atau ID grup numerik jika grup tidak memiliki nama.%k
– Mengembalikan jumlah ruang disk yang digunakan untuk file dalam 1K blok.%m
– Mengembalikan bit izin file (dalam oktal).%p
– Mengembalikan nama file persis file.%s
– Mengembalikan ukuran file dalam byte.%t
– Mengembalikan waktu modifikasi terakhir file dalam format yang dikembalikan oleh-ctime
pilihan.%u
– Mengembalikan nama pengguna pemilik file atau ID pengguna numerik jika pengguna tidak memiliki nama.
Membatasi Kedalaman Menemukan File
Mungkin Anda ingin mempersempit lebih jauh dan membatasi pencarian di direktori; Anda harus menggunakan -maxdepth
opsi dengan find
perintah, seperti yang ditunjukkan di bawah ini.
-maxdepth
parameter memberitahu find
perintah untuk membatasi ruang lingkup pencarian hanya pada sejumlah subdirektori di bawah pohon direktori.
# Find files and directories one step down from the working directory
find . -maxdepth 1 -name "chart*"
# Find files and directories two steps down from the ~/chart directory
find ~/chart -maxdepth 2 -name "chart"
Menemukan File Terbatas pada Direktori Kerja dengan -prune
Opsi
Jika Anda perlu membatasi pencarian hanya pada direktori kerja saat ini dan tidak berulang ke subdirektori mana pun, lihat -prune
parameter.
Pada perintah di bawah, Anda akan find
file dan direktori yang diberi nama (-name
) jangan mulai dengan snap
dan terbatas (-prune
) ke direktori kerja (.
).
Untuk mendapatkan hasil pencarian untuk file dan folder dengan nama dimulai dari
snap
sebagai gantinya, hapus-or
operator dan-print action
, seperti ini:find . -name "snap*" -prune
find . -name "snap*" -prune -or -print
Menemukan File dan Direktori melalui Akses Terakhir
Memangkas file tertentu pasti mempersempit hasil pencarian. Tetapi bagaimana jika satu-satunya hal yang Anda ingat tentang file yang Anda cari adalah terakhir kali Anda mengakses file itu? Nah, kabar baiknya adalah perintah find memungkinkan Anda mencari file dan direktori melalui akses terakhir mereka. Mari selami!
Menemukan File melalui Akses Hari Terakhir File
Katakanlah Anda masih ingat hari terakhir Anda mengakses file atau direktori, lalu -atime
opsi yang dikombinasikan dengan find
perintah adalah semua yang Anda butuhkan, seperti yang ditunjukkan di bawah ini. Jika akses terakhir kali file tidak termasuk dalam nilai yang Anda tentukan, find
perintah mengembalikan nilai palsu dan melewatkan file itu.
# Find files and directories you last accessed between 2-3 days ago
find -atime 2
# Find files and directories you last accessed within the past 2 days
find -atime -2
# Find files and directories you last accessed within the past day
find -atime 0
Mungkin Anda juga ingin melihat terakhir kali akses file atau direktori, lalu tambahkan
-printf
tindakan dengan arahan. Baris perintah di bawah ini memungkinkan Andafind
file yang diakses dalam satu hari terakhir (-atime 0
). Kemudian-printf
tindakan menghasilkan akses terakhir kali (%a
) dari file atau direktori dan nama file (%p
), masing-masing pada baris baru (\n
), seperti yang ditunjukkan di bawah ini.
find -atime 2 -printf "%a %p \n"
Menemukan File melalui Akses Menit Terakhir File
Katakanlah Anda perlu menemukan file berdasarkan menit. Seperti -atime
opsi, -amin
fungsinya sama. Namun sebaliknya, Anda akan mendapatkan hasil penelusuran untuk file yang difilter berdasarkan akses terakhirnya berdasarkan nilai yang Anda tentukan, seperti yang ditunjukkan di bawah ini.
# Find files and directories accessed within the past 40 minutes
# Not ideal most of the time as you will get result of tons of files and directories
find -amin 40
# Find directories accessed within the past 40 minutes
find -name "snap*" -type d -amin -40
# Find files accessed within the past 40 minutes
find -name "snap*" -type f -amin -40
Menemukan File dan Direktori melalui Perubahan Terakhir
Menemukan file atau direktori melalui akses terakhir kali dapat menghasilkan banyak hasil, yang akan terlihat membingungkan jika nama filenya serupa. Jadi untuk lebih mempersempit hasil pencarian, gunakan -ctime
pilihan sebagai gantinya. -ctime
option memfilter hasil pencarian berdasarkan terakhir kali Anda membuat perubahan pada file atau direktori berdasarkan nilai yang ditentukan (dalam beberapa hari terakhir).
Mungkin Anda ingin mencari file yang Anda modifikasi dua hari lalu. Jika demikian, jalankan contoh perintah di bawah ini.
# Find files and directories you modifed in the past two days
find -ctime -2
# Find files and directories with names starting with 'snap'
# which you modifed in the past two days
find -name "snap*" -ctime -2
Menjalankan Perintah Setelah Menemukan File atau Direktori
find
perintah tidak hanya menemukan file dan direktori; itu juga dapat menjalankan perintah segera setelah menampilkan hasil pencarian menggunakan -exec
parameter. Fitur ini sangat bagus saat Anda ingin membuka file di editor teks atau menghapus file atau direktori yang pernah ditemukan, misalnya.
Pastikan untuk keluar dari titik koma (
;
) dengan garis miring terbalik (\
) untuk mencegahnya diinterpretasikan.
# Find a file named 'snap.doc' then open the file in vi editor
find -name "snap.doc" -exec vi {} \;
# Find a file named 'snap.doc' then remove the file
find -name "snap.doc" -exec rm {} \;
Menghapus File dan Direktori dengan -delete
Tindakan
find
perintah tidak hanya membiarkan Anda menemukan file seperti yang telah Anda pelajari sejauh ini. find
perintah juga memberi Anda opsi untuk menghapus file secara otomatis setelah ditemukan. Mungkin Anda perlu menghapus file atau direktori kosong dengan nama tertentu atau mencocokkan pola tertentu. Kemudian find
perintah dengan -delete
tindakan pasti akan berguna.
Untuk mendemonstrasikan penghapusan file dan direktori dengan -delete
tindakan, buat direktori dan file terlebih dahulu. Di bawah, baris perintah memungkinkan Anda membuat (mkdir
) direktori bernama (thanos
), lalu file bernama snap
di dalam thanos
direktori.
mkdir thanos
touch thanos/snap
-delete
tindakan hanya menghapus direktori kosong. Jadi jika Anda mencoba untuk menghapus thanos
direktori dengan baris perintah di bawah ini, Anda akan mendapatkan pesan yang mengatakan temukan:tidak dapat menghapus 'thanos':Direktori tidak kosong.
Untuk menghapus satu file (
snap
), tentukan-type
tes ketika Anda menjalankan perintah find, seperti ini:find "snap" -type f -delete
# Find a directory named 'thanos', then delete the directory
# This command fails since the 'thanos' directory is not empty
find "thanos" -type d -delete
# Find a file named 'thanos.snap', then delete the file
find "thanos.snap" -type f -delete
Untuk menghapus ~/thanos direktori, terapkan -depth
pilihan, seperti yang ditunjukkan di bawah ini. find
perintah akan mencari thanos
direktori dan hapus secara rekursif (-delete
) isi ~/thanos direktori dan hapus direktori itu sendiri.
find "thanos" -depth -delete
Kesimpulan
Artikel ini bertujuan untuk mengajari Anda berbagai cara tentang bagaimana perintah Bash find memungkinkan Anda menemukan file, mendapatkan properti file, dan bahkan memodifikasi output dalam format tertentu. Sebelumnya, menemukan file yang hilang dipenuhi dengan rintangan di sepanjang jalan. Tapi sekarang, kamu bisa melompati rintangan dan langsung menuju garis finis—apakah itu dianggap curang?
Yah, terlepas dari metode mana Anda mencoba menemukan file Anda, pengalamannya pasti memuaskan! Jadi, tes, tindakan, atau opsi mana yang menurut Anda paling menarik?