Saya mencoba mencari file bernama Book1 .
Dalam pengujian saya, saya mencoba mencari file yang disebutkan di atas dan dalam tes ini, saya tidak tahu di mana file itu berada.
Saya mencoba find / -iname book1
tetapi tidak ada output.
Bagaimana cara menemukan file saya disebut book1 menggunakan baris perintah jika saya tidak tahu di mana file itu berada?
EDIT:
Skenario saya dijelaskan secara lebih rinci di bawah ini:
- Ekstensi file tidak diketahui
- Nama persisnya (yaitu huruf kapital, angka, dll.) Tidak diketahui
- Lokasi file tidak diketahui
command-line
files
find
Aspire27
sumber
sumber
Book1
, dan itu ada di direktori yang bisa Anda baca, makafind / -iname book1
akan menemukannya. Apakah Anda yakin itu sebenarnyaBook1
, dan bukanBook1.xyz
?find
danlocate
.locate
murah hati, dan akan menemukan apa pun yang cocok, asalkan ada di database-nya, yang biasanya diperbarui setiap hari.find
, dalam hal ini, mencari berkas glob, jenis pola yang akan Anda gunakanls
. Anda mungkin berartiiname '*book1*'
. Perhatikan bahwa polanya harus berada di dalam tanda kutip untuk menghentikan shell agar tidak memperluasnya sebelumfind
melihatnya. Juga perhatikan bahwafind
, seperti banyak perintah * nix, sangat sunyi ketika tidak berhasil.Jawaban:
Pertama, argumen
-iname
adalah pola shell . Anda dapat membaca lebih lanjut tentang pola dalam manual Bash . Intinya adalah agarfind
benar-benar menemukan file nama file harus cocok dengan pola yang ditentukan. Untuk membuatbook1
kecocokan string case-insensitiveBook1.gnumeric
Anda juga harus menambahkan*
sehingga terlihat seperti ini:atau sebutkan nama lengkap:
Kedua,
-iname
akan membuatfind
abaikan case nama file jadi jika Anda menentukannya-iname book1
mungkin juga menemukanBook1
,bOok1
dll. Jika Anda yakin file yang Anda cari dipanggilBook1.gnumeric
maka jangan gunakan-iname
tetapi-name
, itu akan lebih cepat:Ketiga, ingat tentang mengutip pola seperti yang dikatakan dalam jawaban lain .
Dan yang terakhir - Anda yakin ingin mencari file di mana saja di sistem Anda? Mungkin saja file yang Anda cari sebenarnya ada di
$HOME
direktori Anda jika Anda mengerjakannya atau mengunduhnya dari suatu tempat. Sekali lagi, itu mungkin jauh lebih cepat.EDIT :
Saya perhatikan bahwa Anda mengedit pertanyaan Anda. Jika Anda tidak mengetahui nama lengkap, huruf besar, dan lokasi, Anda harus menggunakan sesuatu seperti ini:
Saya juga menyarankan meletakkan
2>/dev/null
di akhir baris untuk menyembunyikan semua*permission denied*
dan kesalahan lain yang akan ada jika Anda memanggilfind
sebagai pengguna non-root:Dan jika Anda yakin sedang mencari satu file, dan hanya ada satu file di sistem Anda yang sesuai dengan kriteria yang dapat Anda kirim
find
untuk keluar setelah menemukan file yang cocok pertama:sumber
-iname
tidak portabelAnda dapat mencoba
locate
perintahnya. Ini menggunakan database nama file untuk membuat pencarian lebih cepat.Untuk mencari semua file yang cocok
*book1*
, dan mengabaikan case, Anda bisa menggunakanjika Anda ingin mencari file yang dimulai dengan
book1
Anda harus melakukan wildcard sendiri:Ini jauh lebih cepat daripada
find
, tetapi hanya sebagai up-to-date sebagai terakhir kali database disegarkan.sumber
Jika Anda tahu Anda memiliki file yang dipanggil
book1.something
, di mana lokasi file, nilai tepatsomething
, dan pola kapitalisasi nama file semua tidak diketahui:Jika yang Anda tahu pasti adalah bahwa nama file mengandung kata
book
, Anda dapat membuat daftar yang kemungkinan jauh lebih besarArgumennya
-name
adalah pola shell glob. Dari direktori tempat file berada, bandingkan:Ini mewakili jenis pencarian yang dilakukan oleh
-name
. The-iname
pilihan hanya memungkinkan versi case-insensitive ini.sumber
POSIXly,
Akan melaporkan jalan semua file yang namanya mengandung
book1
(dengan variasi kasus, tetapi hanya mengingat ASCII karakter latinbokBOK
, tidak banyak variasi lainnya di Unicode seperti𝗄
,𝚔
,𝘬
,ᵏ
,ₖ
,K
,k
dan semua variasi mereka dengan diakritik ...) di semua direktori yang telah Anda baca aksesnya.sumber
Untuk tugas-tugas semacam ini saya selalu melakukan:
find / -iregex '.*Book1.*'
Formulir ini akan menangani 3 poin skenario Anda (
iregex
adalah kasus ekspresi rasional tidak sensitif, dan pola dengan.*
di kedua sisi akan cocok dengan karakter apa pun sebelum dan setelah pola tetap Anda Book1 - ini jelas dapat memberikan Anda lebih banyak hasil daripada yang diperlukan tetapi Anda yakin tidak ketinggalan file)Perbedaan utama: jika mungkin, lebih ketat daripada hanya menggunakan
/
, seperti mencoba hanya/home
atau lebih, jika tidak Anda akan turun di beberapa direktori yang tidak relevan (/sys
,/dev
, dll ...)Namun ingat bahwa izin Unix berlaku: jika file tersebut ada di direktori yang
find
haknya digunakan pengguna untuk menjalankan perintah (mengeksekusi),find
tidak akan dapat menemukannya di sana.sumber
find
Silver Searcher adalah utilitas yang sangat cepat dan praktis untuk mencari file dan konten.
Untuk mengatasi masalah Anda, perintah pencari perak akan terlihat seperti ini ...
ag -g Book1
-g PATTERN
Cetak nama file yang cocok dengan POLAsumber
locate
dan variannya cenderung merupakan metode yang cepat.Jika lokasi tidak tersedia, Anda dapat menggunakannya
find
. Itu cenderung jauh lebih lambat, tetapi juga jauh lebih tepat.Jika Anda memiliki partisi tunggal: (jalankan sebagai root jika pengguna Anda mungkin tidak memiliki akses ke file)
Jika Anda tidak memasukkan
-xdev
find
pencarian pada partisi lain, seperti/proc
dan/sys
, yang cenderung membanjiri layar Anda dengan kesalahan, terutama jika Anda tidak melakukan root. (Kesalahan dapat disembunyikan dengan menambahkan2> /dev/null
pada akhir perintah find (komentar harus dihapus))Jika Anda memiliki banyak partisi dan Anda tidak tahu di mana file itu berada, Anda bisa mendapatkan daftar dengan
lsblk
(pada OS berbasis Linux, parsingdf
output adalah pilihan lain) dan masukkan itu ke dalam menemukan: (root lagi jika Anda tidak tahu apakah Anda dapat mengakses file)(Ini agak rapuh jika salah satu mountpoints Anda memiliki spasi di) (
df
parameter mungkin perlu tuning. -P membuat GNUdf
memberikan output POSIX standar. Versi lain mungkin memiliki parameter lain atau perlu ditinggalkan. Baca halaman manual Anda)Tidak
grep -F
termasuk hal-hal lain yang dikembalikan, seperti partisi swap.Dalam versi non-GNU, awk menemukan perangkat dengan mount yang dimulai dengan
/dev
untuk mendapatkan sistem file nyata dan kemudian mencetak bidang terakhir (titik mount) daridf
output.Ini juga mengasumsikan shell seperti bourne (
ksh
danbash
harus bekerja. Jika Anda menggunakancsh
varian, mulai shell scriptable sebelum Anda mencoba ini)sumber
grep
s mungkin sedikit bising, belajar bagaimana untuk menyaring itu lebih baik (ini seharusnya tidak diperlukan dengan contoh, tetapi jika itu adalah sesuatu yang lebih umum yang mencari, yang greps akan perlu tuning untuk menjaga tingkat kebisingan bawah)ag (pencari perak) menyediakan pencarian sangat cepat dalam file, dan juga memiliki opsi untuk mencari nama file:
Jadi dalam kasus penggunaan saya di sini> 30 kali lebih cepat jika file tersebut bukan file yang diabaikan oleh ag.
sumber