Saya tahu ini ditandai sebagai linux tetapi ini layak disebutkan: path diperlukan untuk varian * nix lain yang bukan linux. Di linux, path bersifat opsional jika Anda ingin menggunakan dot.
IslandCow
4
@Seatter "foo *" memberitahu find untuk mencari semua file yang dimulai dengan "foo". Itu hanya contohnya. Anda dapat menggunakan "gpio *" untuk menemukan semua file yang namanya dimulai dengan gpio, atau hanya "gpio1" untuk menemukan semua file yang bernama gpio1.
schumacher574
29
perhatikan bahwa "foo *" dalam tanda kutip sehingga shell tidak memperluasnya sebelum meneruskannya untuk menemukannya. jika Anda baru saja melakukannya find . foo*, maka foo*akan diperluas DAN LALU berlalu untuk menemukan.
Grinch
33
Patut ditekankan bahwa " "sangat diperlukan untuk pencarian rekursif.
WesternGun
3
Juga berguna: Jika Anda tidak ingin diberitahu tentang direktori yang tidak memiliki izin untuk (atau kesalahan lain), Anda dapat melakukannyafind . -name "foo*" 2>/dev/null
Jobbo
222
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:
findjuga memiliki tanda -iname,, -regexdan -iregextanda untuk wildcard, regex, dan pencocokan regex case-insensitive, sehingga pemipaan ke greptidak perlu.
iobender
7
Saya tidak berpikir ini tentang tidak perlu, tetapi lebih nyaman.
Elijah Lynn
1
Namun, perpipaan ke grep -v dapat memungkinkan Anda menggunakan string atau regex sederhana untuk menghapus entri yang tidak Anda inginkan.
door_number_three
3
@ iobender - Sedihnya, saya dapat memberi tahu Anda dari pengalaman bahwa tidak semua sistem datang dengan findperintah yang mendukung opsi-opsi itu. Terkadang grepmenjadi satu-satunya pilihan.
Tn. Llama
150
find akan menemukan semua file yang cocok dengan suatu pola:
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
L switch sangat membantu. Banyak kali pengguna tidak memiliki ide tentang direktori yang mendasarinya, apakah mereka softlink atau direktori normal. Jadi, jika ragu, selalu baik menggunakan opsi L. Setidaknya, itu selalu membantu saya.
Ritesh
2
Itulah jawaban untuk saya. Terima kasih!
iedmrc
33
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 ~/.bashrcfile pengguna Anda .
Lalu saya bisa mencari file apa pun dengan mengetik:
f some_name
Atau Anda dapat menggunakan fdutilitas dengan sintaks sederhana, mis fd pattern.
Jawaban Anda adalah yang paling benar di sini karena hanya mencari file seperti yang ditentukan. Yang lain yang tidak menentukan jenis akan mengembalikan direktori.
wilsotc
jika Anda ingin mencari direktori "-type f" dapat diubah menjadi "-type d"
XYZ_Linux
11
Kamu bisa menggunakan:
# find . -type f -name 'text_for_search'
Jika Anda ingin menggunakan penggunaan REGX -iname
Cara default untuk mencari file rekursif, dan tersedia dalam banyak kasus
find .-name "filepattern"
Itu mulai traversing rekursif untuk nama file atau pola dari dalam direktori saat ini di mana Anda berada. 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 setelah itu 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 --helpatauman locate
Selain itu, Anda dapat mengonfigurasi loc untuk memperbarui database pada waktu yang dijadwalkan melalui pekerjaan cron, jadi cron sampel yang memperbarui db pukul 1AM akan terlihat seperti:
01*** updatedb
Pekerjaan cron ini perlu dikonfigurasi oleh root, karena updatedb membutuhkan hak akses root untuk melintasi seluruh sistem file.
Saya terkejut melihat bahwa loc tidak banyak digunakan ketika kita akan pergi secara rekursif.
Pertama-tama saya akan mencari "$ PWD" untuk mendapatkan daftar file di folder saat ini yang menarik, dan kemudian jalankan greps pada mereka sesuka saya.
locate "$PWD"| grep -P <pattern>
Tentu saja, ini mengasumsikan bahwa updateb dilakukan dan indeks diperbarui secara berkala. Ini adalah cara yang jauh lebih cepat untuk menemukan file daripada menjalankan find dan memintanya turun pohon. Menyebutkan ini untuk kelengkapan. Tidak ada salahnya menggunakan find, jika pohon tidak terlalu berat.
locate "$PWD*.mp4" Hanya untuk mengingatkan bahwa Anda mungkin dapat melewatigrep
Gua Jefferey
5
Perintah di bawah ini membantu untuk mencari file
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.
kenapa kamu menggunakan grep untuk itu? Arahkan ulang stderr ke nullfind / -iname '*C*.xml' 2>/dev/null
phuclv
3
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) -typeberarti jenis item pencarian yang di sini adalah file (f). -nameberarti Anda ingin mencari file dengan nama * .conf .
find . foo*
, makafoo*
akan diperluas DAN LALU berlalu untuk menemukan." "
sangat diperlukan untuk pencarian rekursif.find . -name "foo*" 2>/dev/null
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:
sumber
find
juga memiliki tanda-iname
,,-regex
dan-iregex
tanda untuk wildcard, regex, dan pencocokan regex case-insensitive, sehingga pemipaan kegrep
tidak perlu.find
perintah yang mendukung opsi-opsi itu. Terkadanggrep
menjadi satu-satunya pilihan.find
akan menemukan semua file yang cocok dengan suatu pola:Namun, jika Anda menginginkan gambar:
Semoga ini membantu!
sumber
brew install tree
untuk pengguna Mac OSX tanpaapt-get
diinstalDalam 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
sumber
Jika shell Anda mendukung opsi globbing baru (dapat diaktifkan oleh:)
shopt -s globstar
, Anda dapat menggunakan: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:
Catatan: Baris di atas dapat disisipkan langsung ke shell atau ditambahkan ke
~/.bashrc
file pengguna Anda .Lalu saya bisa mencari file apa pun dengan mengetik:
Atau Anda dapat menggunakan
fd
utilitas dengan sintaks sederhana, misfd pattern
.sumber
shopt -s globstar
perintah. Ini didukung dalam Bash, zsh dan shell serupa.bash-3.2$ shopt -s globstar
memberibash: shopt: globstar: invalid shell option name
fd
Jika
find
terlalu lambat, cobafd
utilitas - alternatif sederhana dan cepat untukfind
ditulis dalam Rust.Sintaksis:
Demo:
Beranda: https://github.com/sharkdp/fd
sumber
asciinema
, kemudian dikonversi ke format GIF, tapi saya tidak yakin.asciicast2vector
bisa digunakan.Dalam wildcard-match Anda dapat memberikan string yang ingin Anda cocokkan misalnya * .c (untuk semua file c)
sumber
Kamu bisa menggunakan:
Jika Anda ingin menggunakan penggunaan REGX
-iname
sumber
Perintah berikut akan mencantumkan semua file yang memiliki nama persis "pola" (misalnya) di folder saat ini dan subnya.
find ./ -name "pattern"
sumber
Cara default untuk mencari file rekursif, dan tersedia dalam banyak kasus
Itu mulai traversing rekursif untuk nama file atau pola dari dalam direktori saat ini di mana Anda berada. Dengan perintah find, Anda dapat menggunakan wildcard, dan berbagai sakelar, untuk melihat daftar opsi, ketik
atau jika halaman manual tidak tersedia di sistem Anda
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 setelah itu diinstal itu perlu memulai database, jika skrip instal tidak melakukannya untuk Anda, itu bisa dilakukan secara manual dengan mengetik
Dan, untuk menggunakannya untuk mencari beberapa jenis file tertentu
Atau, untuk mencari nama file atau derai dari dalam direktori saat ini, Anda dapat mengetik:
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
atauman locate
Selain itu, Anda dapat mengonfigurasi loc untuk memperbarui database pada waktu yang dijadwalkan melalui pekerjaan cron, jadi cron sampel yang memperbarui db pukul 1AM akan terlihat seperti:
Pekerjaan cron ini perlu dikonfigurasi oleh root, karena updatedb membutuhkan hak akses root untuk melintasi seluruh sistem file.
sumber
untuk pencarian file
find / -xdev -name settings.xml
-> seluruh komputerfind ./ -xdev -name settings.xml
-> direktori saat ini & sub direktoriuntuk file dengan tipe ekstensi
sumber
Saya terkejut melihat bahwa loc tidak banyak digunakan ketika kita akan pergi secara rekursif.
Pertama-tama saya akan mencari "$ PWD" untuk mendapatkan daftar file di folder saat ini yang menarik, dan kemudian jalankan greps pada mereka sesuka saya.
Tentu saja, ini mengasumsikan bahwa updateb dilakukan dan indeks diperbarui secara berkala. Ini adalah cara yang jauh lebih cepat untuk menemukan file daripada menjalankan find dan memintanya turun pohon. Menyebutkan ini untuk kelengkapan. Tidak ada salahnya menggunakan find, jika pohon tidak terlalu berat.
sumber
locate "$PWD*.mp4"
Hanya untuk mengingatkan bahwa Anda mungkin dapat melewatigrep
Perintah di bawah ini membantu untuk mencari file
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 | Contoh grep -v "Izin ditolak"
sumber
find / -iname '*C*.xml' 2>/dev/null
Jika Anda ingin mencari file khusus dengan wildcard, Anda dapat menggunakan kode berikut:
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 nama * .conf .sumber
Ini akan mencari semua file terkait di direktori saat ini dan sub direktori, menghitung jumlah baris mereka secara terpisah serta sepenuhnya:
sumber
Menggunakan
Penjelasan
find
melakukan rekursi.-o
singkatan-or
. Jadi di atas berarti mencari wildcard ini ATAU yang ini. Jika Anda hanya memiliki satu pola maka tidak perlu-o
.sumber