Bagaimana saya dapat secara rekursif menemukan semua file saat ini dan subfolder berdasarkan pencocokan wildcard?
Gunakan temukan untuk itu:
find . -name "foo*"
find
membutuhkan titik awal, dan .
(titik) menunjuk ke direktori saat ini.
Menemukan pipa ke grep seringkali lebih nyaman; itu memberi Anda kekuatan penuh ekspresi reguler untuk pencocokan wildcard sewenang-wenang.
Sebagai contoh, untuk menemukan semua file dengan string case foo "tidak sensitif" dalam nama file:
~$ find . -print | grep -i foo
find
akan menemukan semua file yang cocok dengan suatu pola:
find . -name "*foo"
Namun, jika Anda menginginkan gambar:
tree -P "*foo"
Semoga ini membantu!
Jika Shell Anda mendukung opsi globbing baru (dapat diaktifkan oleh: shopt -s globstar
), Anda dapat menggunakan:
echo **/*foo*
untuk menemukan file atau folder apa pun secara rekursif. Ini didukung oleh Bash 4, zsh dan shell serupa.
Secara pribadi saya mendefinisikan fungsi Shell ini:
f() { find . -name "*$1*"; }
Catatan: Baris di atas dapat disisipkan langsung ke Shell atau ditambahkan ke file ~/.bashrc
pengguna Anda.
Lalu saya bisa mencari file apa pun dengan mengetik:
f some_name
Atau Anda dapat menggunakan utilitas fd
dengan sintaks sederhana, mis. fd pattern
.
find -L . -name "foo*"
Dalam beberapa kasus, saya membutuhkan parameter -L untuk menangani tautan direktori simbolik. Secara default, tautan simbolik diabaikan. Dalam kasus-kasus itu cukup membingungkan karena saya akan mengubah direktori ke sub-direktori dan melihat file yang cocok dengan pola tetapi menemukan tidak akan mengembalikan nama file. Menggunakan -L memecahkan masalah itu. Opsi tautan simbolik untuk find adalah -P -L -H
find <directory_path> -type f -name "<wildcard-match>"
Dalam wildcard-match Anda dapat memberikan string yang ingin Anda cocokkan mis. * .c (untuk semua file c)
fd
Jika find
terlalu lambat, coba utilitas fd
- sebuah alternatif sederhana dan cepat untuk find
yang ditulis dalam Rust.
Sintaksis:
fd PATTERN
Demo:
Beranda: https://github.com/sharkdp/fd
Kamu bisa memakai:
# find . -type f -name 'text_for_search'
Jika Anda ingin menggunakan REGEX, gunakan -iname
# find . -type f -iname 'text_for_search'
Cara default untuk mencari file rekursif, dan tersedia dalam kebanyakan kasus adalah
find . -name "filepattern"
Itu mulai traversing rekursif untuk nama file atau pola dari dalam direktori saat ini di mana Anda diposisikan. Dengan perintah find, Anda dapat menggunakan wildcard, dan berbagai sakelar, untuk melihat daftar opsi, ketik
man find
atau jika halaman manual tidak tersedia di sistem Anda
find --help
Namun, ada alat yang lebih modern dan lebih cepat kemudian menemukan, yang melintasi seluruh sistem file Anda dan mengindeks file Anda, salah satu alat umum tersebut adalah mencari atau slocate/mlocate, Anda harus memeriksa manual OS Anda tentang cara menginstalnya, dan begitu diinstal itu perlu memulai database, jika skrip instal tidak melakukannya untuk Anda, itu bisa dilakukan secara manual dengan mengetik
Sudo updatedb
Dan, untuk menggunakannya untuk mencari beberapa jenis file tertentu
locate filename
Atau, untuk mencari nama file atau derai dari dalam direktori saat ini, Anda dapat mengetik:
pwd | xargs -n 1 -I {} locate "filepattern"
Ini akan melihat melalui database file dan dengan cepat mencetak nama jalur yang cocok dengan pola yang telah Anda ketik . Untuk melihat daftar lengkap opsi temukan, ketik: locate --help
atau man locate
Selain itu Anda dapat mengonfigurasi loc untuk memperbarui basis data pada waktu yang dijadwalkan melalui pekerjaan cron, jadi cron sampel yang memperbarui db pada pukul 1AM akan terlihat seperti:
0 1 * * * updatedb
Pekerjaan cron ini perlu dikonfigurasi oleh root, karena updatedb membutuhkan hak akses root untuk melintasi seluruh sistem file.
untuk pencarian file find / -xdev -name settings.xml
-> seluruh komputer find ./ -xdev -name settings.xml
-> direktori saat ini & sub direktori
untuk file dengan tipe ekstensi
find . -type f -name "*.iso"
Perintah di bawah ini membantu untuk mencari file apa pun
1) Terlepas dari kasus
2) Hasil Tidak termasuk folder tanpa izin
3) Pencarian dari root atau dari jalur yang Anda suka. Ubah/dengan jalur yang Anda inginkan.
Sintaks:
find -iname '' 2> & 1 | grep -v "Izin ditolak"
Contoh
temukan/-inama 'C * .xml' 2> & 1 | grep -v "Izin ditolak"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
Perintah berikut akan mencantumkan semua file yang memiliki nama persis "pola" (misalnya) di folder saat ini dan subnya.
find ./ -name "pattern"
Ini akan mencari semua file terkait di direktori saat ini dan sub direktori, menghitung jumlah baris mereka secara terpisah serta sepenuhnya:
find . -name "*.wanted" | xargs wc -l
Jika Anda ingin mencari file khusus dengan wildcard, Anda dapat menggunakan kode berikut:
find . -type f -name "*.conf"
Misalkan, Anda ingin mencari setiap file .conf dari sini:
.
berarti pencarian dimulai dari sini (tempat saat ini)-type
berarti jenis item pencarian yang di sini adalah file (f).-name
berarti Anda ingin mencari file dengan * .conf names.