GNU/Linux >> Belajar Linux >  >> Linux

15 Contoh Perintah Find yang Sangat Berguna di Linux

Perintah find digunakan untuk mencari file dan direktori di baris perintah Linux.

Temukan adalah salah satu perintah yang paling kuat dan sering digunakan. Ini juga merupakan salah satu perintah paling ekstensif dengan lebih dari 50 opsi dan ini membuatnya sedikit membingungkan, khususnya ketika dipasangkan dengan perintah exec atau xargs.

Tidak mungkin bagi sysadmin atau pengembang perangkat lunak untuk menghindari perintah find saat bekerja di baris perintah. Alih-alih takut, Anda harus merangkul kekuatannya.

Saya akan membahas beberapa contoh paling umum dari perintah find yang kemungkinan besar akan Anda gunakan. Namun sebelum itu, izinkan saya menunjukkan sintaks dan cara menggunakannya.

Temukan perintah di Linux

Sintaks umum untuk perintah find adalah:

find [directory to search] [options] [expression]

Semua yang ada di dalam kurung [] adalah opsional. Artinya Anda dapat menjalankan find perintah tanpa opsi dan argumen apa pun. Itu hanya akan membuang semua file dan direktori di lokasi saat ini. Itu tidak terlalu berguna, kan?

Mari kita lihat lebih detail:

  • directory to search pada dasarnya adalah lokasi dari mana Anda ingin memulai pencarian Anda. Secara default, pencarian bersifat rekursif dan dimulai dari lokasi Anda saat ini.
  • options tentukan jenis pencarian, baik itu berdasarkan nama, jenis, waktu modifikasi, dll. Ada lebih dari 50 opsi yang tersedia di sini.
  • expression memungkinkan Anda untuk menentukan istilah pencarian. Jika Anda ingin mencari file berdasarkan namanya, ekspresi adalah nama filenya. Jika Anda ingin menemukan file dengan nama yang cocok dengan suatu pola, ekspresikan dalam pola tersebut.

Mari saya ambil contoh sederhana:

find . -type f -name myfile

Perintah ini akan menjalankan pencarian di direktori saat ini dan subdirektori untuk menemukan file (bukan direktori) bernama myfile . Opsi -type f memintanya untuk mencari file saja. Satu titik . berarti direktori saat ini.

Mari kita lihat beberapa contoh praktis dari perintah find.

Menemukan file dan direktori berdasarkan nama

Anda dapat mencari file dan direktori dengan namanya:

find . -name SEARCH_NAME

Karena tidak ada jenis file yang disebutkan, ia akan mencari file dan direktori dengan nama yang diberikan.

Contoh di bawah ini menemukan file dan direktori bernama mystuff:

[email protected]:~/Examples$ find -name mystuff
./new/mystuff
./mystuff

Temukan hanya file atau direktori saja

Jika Anda hanya ingin mencari file, tentukan jenis file -f:

find . -type f -name SEARCH_NAME

Urutan jenis dan nama tidak masalah. Ambil contoh sebelumnya dan temukan hanya untuk file:

[email protected]:~/Examples$ find -type f -name mystuff
./mystuff

Jika Anda hanya ingin mencari direktori, tentukan jenis -d:

find . -type d -name SEARCH_NAME

Di file sebelumnya, cari direktori saja:

[email protected]:~/Examples$ find -type d -name mystuff
./new/mystuff

Secara default, perintah find peka huruf besar/kecil. Anda dapat menjalankan pencarian peka huruf besar/kecil dengan nama yang diberikan dengan menggunakan -iname bukannya -name .

find . -type f -iname SEARCH_NAME

Anda dapat menggunakannya dengan type d juga.

[email protected]:~/Examples$ find -iname mystuff
./new/mystuff
./MyStuff
./mystuff

Tangkapan layar dari tiga contoh di atas:

Mencari file menurut ekstensinya (penting)

Salah satu penggunaan paling umum dari perintah find adalah untuk menemukan file dari jenis tertentu atau haruskah saya mengatakan ekstensi tertentu.

Misalnya, Anda ingin mencari semua file C++ di direktori saat ini. File C++ diakhiri dengan ekstensi .cpp, sehingga Anda dapat mencarinya seperti ini:

find . -type f -name "*.cpp"

Dengan cara ini, Anda memberi tahu perintah find untuk mencari type file dan dengan nama yang diakhiri dengan .cpp .

[email protected]:~$ find . -type f -name "*.cpp"
./file.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream2/zstream_test.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream/test.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream/zfstream.cpp
Selalu letakkan ekspresi pencarian Anda dalam tanda kutip ganda saat menggunakan perintah find.

Mengapa saya merekomendasikan penggunaan tanda kutip ganda atau tanda kutip tunggal di sekitar istilah pencarian Anda? Karena jika Anda tidak melakukannya, shell akan memperluas wildcard.

Jika Anda tidak membungkus istilah pencarian Anda dengan tanda kutip:

find . -type f -name *.cpp

Shell Anda akan memperluas *.cpp dan menggantinya dengan semua file di direktori saat ini yang namanya diakhiri dengan .cpp.

Ini bisa bekerja jika hanya ada satu file tetapi jika ada lebih dari satu, shell Anda akan mengeluhkan sintaks yang salah.

Dalam contoh di atas, hanya ada satu file cpp dan karenanya ketika perintah diperluas ke find . -type f -name file.cpp , ini berfungsi karena file.cpp masih berfungsi sebagai istilah penelusuran.

Tetapi ada dua file .txt di direktori yang sama dan karenanya ketika perintah diperluas ke find . -type f -name another.txt new.txt , ia mengeluh karena ada lebih dari satu istilah penelusuran sekarang.

Inilah sebabnya mengapa Anda harus selalu membungkus istilah pencarian Anda dengan tanda kutip ganda.

Telusuri banyak file dengan banyak ekstensi (atau kondisi)

Perintah di atas mencari file dengan ekstensi yang diberikan. Bagaimana jika Anda ingin mencari file dengan ekstensi yang berbeda?

Alih-alih menjalankan perintah find beberapa kali, jalankan sekali dengan menggunakan -o opsi yang berfungsi sebagai kondisi OR logis:

find . -type f -name "*.cpp" -o -name "*.txt" 

Ini contohnya:

[email protected]:~/Examples$ find . -type f -name "*.txt" -o -name "*.cpp"
./new.txt
./file.cpp
./new/new.txt
./new/dir2/another.txt
./new/dir1/new.txt
./another.txt

Cari file di direktori tertentu

Sejauh ini, semua contoh melakukan pencarian di direktori saat ini karena Anda menentukan . dalam contoh.

Titik dapat diganti dengan jalur absolut atau relatif direktori sehingga Anda dapat mencari file di direktori yang ditentukan tanpa meninggalkan lokasi Anda saat ini.

[email protected]:~/Examples$ find ./new -name mystuff 
./new/mystuff

Mencari file di beberapa direktori

Jika menurut Anda file yang Anda inginkan dapat ditemukan di beberapa lokasi, Anda tidak perlu menjalankan perintah find beberapa kali. Cukup tentukan semua jalur direktori untuk mencari di perintah find:

find ./location1 /second/location -type f -name "pattern"

Temukan file dan direktori kosong

-empty opsi ini memungkinkan Anda untuk mencari file dan direktori kosong dengan perintah find.

Untuk menemukan semua file dan direktori kosong di direktori saat ini, gunakan:

find . -empty

Anda dapat menentukan jenis file untuk hanya mencari file atau direktori kosong:

find . -empty -type f

Anda juga dapat menggabungkannya dengan pencarian nama file:

find . -empty -type f -name "*.cpp"

Temukan file besar atau kecil (Cari berdasarkan ukuran file)

Anda dapat menemukan file besar atau file kecil berdasarkan pencarian yang dilakukan oleh parameter ukuran. Ini hanya berfungsi dengan file, bukan direktori.

Anda menggunakan -size opsi dengan +N untuk ukuran lebih besar dari N dan -N untuk ukuran lebih kecil dari N.

Temukan file berukuran tepat 50 KB:

find . -size 50k

Untuk mencari file yang lebih besar dari 1 GB di direktori saat ini:

find . -size +1G

Untuk menemukan yang lebih kecil dari 20 byte:

find . -size -20c

Untuk menemukan file yang lebih besar dari 100 MB tetapi lebih kecil dari 2 GB:

find . -size +100M -size -2G

Anda juga dapat menggabungkan pencarian ukuran dengan pencarian nama. Misalnya, untuk mencari semua file dengan nama berakhiran .log tetapi berukuran lebih besar dari 500 MB di direktori root, Anda dapat menggunakan:

find / -size +500M -name "*.log"

Untuk mengingat:

  • c :byte
  • k :kilobyte
  • M :Megabyte
  • G :Gigabyte

Temukan file yang baru dimodifikasi (Penelusuran berdasarkan waktu modifikasi atau pembuatan)

Anda tahu konsep mtime, atime dan ctime, bukan?

  • mtime:waktu terakhir modifikasi file
  • ctime:waktu pembuatan file
  • atime:waktu akses terakhir file

Anda akan sering menemukan diri Anda dalam situasi di mana Anda ingin menemukan semua file yang baru saja dimodifikasi. Pencarian dengan waktu yang dimodifikasi membantu dalam kasus seperti itu.

Untuk menemukan semua file yang dimodifikasi dalam 3 hari (3*24H), gunakan:

find . -type f -mtime -3

Untuk menemukan semua file yang dibuat setidaknya 5 hari (5*24H) yang lalu, gunakan:

find . -type f -ctime +5

Saya tahu 24 jam adalah kerangka waktu yang sangat besar. Bagaimana jika Anda ingin mencari file yang diubah hanya beberapa menit yang lalu? Untuk itu, Anda dapat menggunakan mmin , amin dan cmin .

Untuk menemukan semua file yang diubah dalam 5 menit terakhir, gunakan:

find . -type f -mmin -5

Anda dapat menentukan batas atas dan bawah bersama dengan nama pencarian. Perintah di bawah ini akan mencari semua file .java yang telah dimodifikasi antara 20 hingga 30 menit terakhir.

find . -type f -mmin +20 -mmin -30 -name "*.java"

Temukan file dengan izin file tertentu

Saya harap Anda sudah familiar dengan konsep izin file di Linux.

Perintah find memungkinkan Anda mencari file dengan izin file dan mode akses tertentu.

find -perm mode

Misalnya, untuk menemukan semua file mode akses 777 di direktori saat ini;

find . -perm 777

Untuk menemukan semua file dengan akses baca dan tulis untuk semua (pencocokan persis, tidak akan cocok jika file memiliki izin eksekusi untuk semua):

find . -perm a=r+w

Menemukan file milik pengguna

Anda juga dapat mencari file berdasarkan kepemilikan.

Misalnya, untuk menemukan file yang dimiliki oleh pengguna John di direktori saat ini, gunakan:

find . -type f -user John

Anda juga dapat menggabungkannya dengan opsi lain seperti ukuran, waktu, dan nama:

find . -type f -user John -name "*.cpp"

Jangan temukan secara rekursif, cari hanya di direktori saat ini

Secara default, perintah find mencari di semua subdirektori di lokasi Anda saat ini. Jika Anda tidak menginginkannya, Anda dapat menentukan kedalaman pencarian Anda menjadi 1. Ini akan membatasi pencarian hanya pada direktori saat ini dan mengecualikan subdirektori apa pun.

find . -maxdepth 1 -type f -name "*.txt"

jika Anda ingin mengecualikan direktori dari pencarian, Anda dapat melakukannya dengan menggabungkan path, prune dan logis atau.

find . -path "./directory_exclude/*" -prune -o -name SEARCH_NAME

Hati-hati dengan * di jalur direktori, -prune setelah jalur dan -o setelah dipangkas.

Pada dasarnya, perintah prune meminta untuk tidak menggunakan nilai yang ditentukan oleh jalur. Prune selalu digunakan dengan -o untuk memastikan bahwa sisi kanan istilah dievaluasi hanya untuk direktori yang tidak dipangkas.

Ambil tindakan atas hasil perintah find (exec dan xargs)

Sejauh ini, Anda telah mempelajari berbagai cara untuk menemukan file berdasarkan berbagai kriteria. Bagus. Tetapi Anda dapat membuatnya lebih baik dengan mengambil tindakan tertentu pada hasil perintah find.

Misalnya, bagaimana dengan menemukan file yang cocok dengan pola nama tertentu dan mengganti namanya sekaligus atau menemukan file kosong dan menghapusnya?

Anda tahu bahwa pengalihan pipa dapat digunakan untuk menggabungkan output dari satu perintah dengan input dari perintah lain. Tapi ini tidak akan bekerja dengan output dari perintah find, setidaknya tidak secara langsung.

Anda memiliki dua opsi jika Anda ingin mengambil tindakan pada hasil perintah find:

  • Gunakan exec
  • Gunakan xargs

Menggunakan find dan exec

Misalkan Anda ingin membuat daftar panjang (ls -l) file pencarian dengan perintah find. Inilah yang Anda gunakan:

find . -type f -name "*.txt" -exec ls -l {} +

Berikut outputnya:

[email protected]:~/Examples$ find . -type f -name "*.txt" -exec ls -l {} +
-rw-rw-r-- 1 abhishek abhishek 39 Oct 13 19:30 ./another.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 15:36 ./new/dir1/new.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 15:36 ./new/dir2/another.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 18:51 ./new/mystuff/new.txt
-rwxrwxrwx 1 abhishek abhishek 35 Oct 13 15:37 ./new/new.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 18:16 ./new.txt

Banyak orang lupa menambahkan {} + di akhir perintah exec. Anda harus menggunakannya dan memperhatikan jarak antara {} dan +.

{} adalah yang mereferensikan hasil dari perintah find. Anda bisa membayangkannya seperti {file 1, file 2, file 3}. + tanda digunakan untuk mengakhiri perintah exec.

Ada juga konvensi lain dengan exec:

find . -type f -name *.txt" -exec ls -l {} \;

Di Sini,; digunakan sebagai pengganti tanda +. Tambahan \ sebelum; digunakan untuk menghindari karakter khusus;.

Keuntungan {} + adalah menjalankan lebih sedikit perintah sebagai ls -l file1 file2 file3 sedangkan {} \; akan menjalankan ls -l file1 , ls -l file2 dll.

Tapi, {} \; memiliki keuntungan menggunakan {} lebih dari sekali dalam pernyataan exec yang sama. Misalnya, perintah di bawah ini akan mengganti nama semua file yang ditemukan dengan ekstensi .old.

find . -type f -name *.txt" -exec mv {} {}.old \;

Menggunakan xargs

Banyak pengguna Linux yang terbiasa dengan pengalihan pipa. Perintah exec ini dengan {} + . di akhir tampaknya menakutkan bagi mereka.

Di sinilah xargs membantu. Anda cukup mengurai output dari perintah find ke perintah xargs melalui pipa.

find . -type f -name *.txt" | xargs ls -l

Sintaksnya tampak jauh lebih sederhana, bukan? Perintah Xargs juga sangat kuat. Anda dapat membacanya di sini.

Menggabungkan find dan grep

Sekarang setelah Anda mengetahui tentang menggabungkan perintah find dengan xargs dan exec, Anda dapat menggunakannya untuk menggabungkan find dan grep.

Untuk sysadmin atau pengembang perangkat lunak mana pun, find dan grep adalah salah satu kombinasi yang paling umum namun paling berguna.

Anda mencari pola nama file dengan find dan kemudian menggunakan grep untuk mencari konten di dalam file tersebut.

Misalnya, Anda ingin mencari semua file .txt yang berisi istilah Alice. Anda menggabungkan find dan grep seperti ini:

find . -type f -name "*.txt" -exec grep -i alice {} +

Hal yang sama dapat dicapai dengan xargs juga:

find . -type f -name "*.txt" | xargs grep -i alice

Tentu saja, ini adalah contoh yang paling sederhana tetapi jika Anda terbiasa dengan perintah grep, Anda dapat menggunakannya sesuai keinginan dan kebutuhan Anda.

Ada banyak lagi dengan find ...

Dan tidak mungkin untuk membuat daftar semua opsi dan contoh perintah find. Kemungkinannya tidak terbatas tetapi ketika Anda terbiasa dengan perintah find, Anda dapat mulai menggunakannya dalam berbagai situasi. Terserah Anda bagaimana Anda menggabungkan logika di sini.

Saya harap Anda menemukan contoh perintah find ini berguna. Jika Anda masih memiliki pertanyaan atau saran untuk menyempurnakan artikel ini, beri tahu saya di bagian komentar.


Linux
  1. Menggunakan perintah find Linux – Penggunaan dengan contoh

  2. ls Perintah di Linux:17 Contoh yang Berguna Dijelaskan

  3. 9 Contoh Perintah Split yang Berguna di Linux

  1. 12 Contoh Perintah Wget yang Berguna di Linux

  2. 25 Berguna menemukan Contoh Praktis Perintah di Linux

  3. Cara Menggunakan Perintah id di Linux:5 Contoh Berguna

  1. 5 Contoh Praktis Perintah dd di Linux

  2. Contoh yang Berguna dari Perintah Docker ps

  3. temukan Contoh Perintah di Linux