Bagaimana saya bisa secara rekursif menemukan semua file di saat ini dan subfolder berdasarkan pencocokan wildcard?
Gunakan menemukan untuk itu:
find . -name "foo*"
menemukan
kebutuhan titik awal, dan .
(dot) poin ke direktori saat ini.
Pipa menemukan ke grep adalah sering lebih mudah; ini memberi anda kekuatan penuh ekspresi reguler untuk sewenang-wenang kata kunci yang cocok.
Misalnya, untuk menemukan semua file dengan kasus sensitif string "anu" dalam nama file:
~$ find . -print | grep -i foo
find -L . -name "foo*"
Dalam beberapa kasus, saya telah diperlukan parameter-L untuk menangani simbolis directory link. Secara default link simbolik diabaikan. Dalam kasus-kasus itu cukup membingungkan karena saya akan mengubah direktori ke sub-direktori dan melihat file pencocokan pola, tetapi menemukan tidak akan mengembalikan berkas. Menggunakan -L memecahkan masalah itu. Link simbolik pilihan untuk menemukan yang -P -L -H
Jika anda shell mendukung baru globbing pilihan (dapat diaktifkan dengan: shopt -s globstar
), anda dapat menggunakan:
echo **/*foo*
untuk menemukan file atau folder secara rekursif. Hal ini didukung oleh Bash 4, zsh dan sejenis kerang.
Secara pribadi saya've punya shell ini fungsi yang didefinisikan:
f() { find . -name "*$1*"; }
Catatan: di Atas garis dapat disisipkan langsung ke shell atau ditambahkan ke pengguna anda's ~/.bashrc
file.
Kemudian saya dapat mencari file dengan mengetik:
f some_name
Atau anda dapat menggunakan fd
utilitas dengan sintaks sederhana, misalnya fd pola
.
Anda dapat menggunakan:
# find . -type f -name 'text_for_search'
Jika anda ingin menggunakan REGX menggunakan -iname
# find . -type f -iname 'text_for_search'
Cara Default untuk mencari rekursif file, dan tersedia dalam banyak kasus
find . -name "filepattern"
Mulai rekursif melintasi untuk nama file atau pola dari dalam direktori saat ini di mana anda berada. Dengan menemukan perintah, anda dapat menggunakan wildcard, dan berbagai switch, untuk melihat daftar lengkap dari pilihan, tipe
man find
atau jika halaman man aren't yang tersedia pada sistem anda
find --help
Namun, ada yang lebih modern dan lebih cepat yang sesuai kemudian menemukan, yang melintasi seluruh filesystem dan pengindeksan file anda, salah satu alat yang umum adalah mencari atau slocate/mlocate, anda harus periksa manual dari OS anda tentang cara untuk menginstalnya, dan setelah itu's diinstal dibutuhkan untuk memulai database, jika menginstal script don't melakukannya untuk anda, hal ini dapat 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"
Hal itu akan terlihat melalui database dari file dan mencetak dengan cepat nama jalan yang sesuai dengan pola yang telah anda ketik.
Untuk melihat daftar lengkap dari cari's options, ketik:
cari --help
atau pria menemukan
Selain itu anda dapat mengkonfigurasi mencari untuk meng-update's database pada waktu yang dijadwalkan melalui cron job, jadi sampel cron yang update db di 1AM akan terlihat seperti:
0 1 * * * updatedb
Ini cron jobs perlu dikonfigurasi oleh akar, karena updatedb membutuhkan hak istimewa root untuk melintasi seluruh filesystem.
Perintah di bawah ini membantu untuk mencari file
find / -iname 'C*.xml' 2>&1 | grep -v "Izin ditolak"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
Jika anda ingin mencari file khusus dengan wildcard, anda bisa menggunakan kode berikut:
find . -type f -name "*.conf"
Misalkan, anda ingin mencari setiap .conf file dari sini:
.
berarti pencarian dimulai dari sini (saat ini tempat)
tipe
berarti jenis pencarian item yang di sini adalah file (f).
nama
berarti anda ingin mencari file dengan *.conf nama.
Saya terkejut melihat bahwa menemukan tidak digunakan berat ketika kita harus pergi secara rekursif.
Saya akan terlebih dahulu melakukan cari "$PWD" untuk mendapatkan daftar file dalam folder saat ini dari bunga, dan kemudian jalankan greps pada mereka seperti yang saya harap.
locate "$PWD" | grep -P <pattern>
Tentu saja, ini adalah asumsi bahwa updatedb dilakukan dan indeks diperbarui secara berkala. Ini adalah cara yang jauh lebih cepat untuk menemukan file untuk menjalankan menemukan dan bertanya itu pergi ke bawah pohon. Menyebutkan ini untuk kelengkapan. Tidak ada yang melawan menggunakan menemukan, jika pohon itu tidak terlalu berat.