GNU/Linux >> Belajar Linux >  >> Linux

Cara Menemukan File dengan Puluhan Kriteria dengan Bash Find Command

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.

Bukan pembaca? Tonton tutorial video terkait ini! b>Tidak melihat videonya? Pastikan pemblokir iklan Anda dinonaktifkan.

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 untuk name parameter, mis., find "snap" sama dengan find -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 memberitahu find 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 Anda find 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?


Linux
  1. Menemukan File di Command Line (Cara)

  2. Cara Menemukan File di CentOS 8 di Command Line

  3. Cara Menemukan File dengan Perintah fd di Linux

  1. Cara mengaudit izin dengan perintah find

  2. Menggunakan perintah find Linux – Penggunaan dengan contoh

  3. Cara menggabungkan perintah 'tar' dengan 'find'

  1. Bagaimana menemukan file duplikat di Linux? Bantuan ada di sini dengan perintah fdupes!

  2. Bagaimana Menemukan Proses Dengan Deskriptor File Maksimum?

  3. Cara Menggunakan Perintah find Linux untuk Menemukan File