Katakan ada file dengan nama:
batman.c
debate.c
cricketbat.c
Perintah apa dan bagaimana saya harus menggunakannya untuk mencantumkan semua file ini dengan menggunakan tag pencarian bat
?
Katakan ada file dengan nama:
batman.c
debate.c
cricketbat.c
Perintah apa dan bagaimana saya harus menggunakannya untuk mencantumkan semua file ini dengan menggunakan tag pencarian bat
?
Jawaban:
bat
Di Mana SajaUntuk menemukan semua file di mana saja di dalam /path/to/folder
yang namanya mengandung bat
, Anda dapat menggunakan:
find /path/to/folder -name '*bat*'
Saya telah mengutip pola pencarian *bat*
karena, jika tanda kutip dihilangkan dan file sesuai *bat*
dalam direktori saat ini, shell akan memperluas *bat*
ke dalam daftar mereka dan lulus yang ke find
. Maka find
tidak akan berhasil. ( \*bat\*
dan "*bat*"
juga bekerja.)
Untuk mencari di folder Anda saat ini (misalnya, bahwa Anda telah cd
diedit), gunakan .
, seperti biasa:
find . -name '*bat*'
Untuk mencari seluruh komputer Anda, gunakan/
. Untuk mencari direktori home Anda, gunakan ~
, atau nama lengkap direktori home Anda. ( Shell mengembang~
ke jalur direktori home yang memenuhi syarat.)
Jika Anda ingin mencari kasus-insensitively, sehingga file yang berisi BAT
, bAt
dan sebagainya dicocokkan, menggunakan -iname
tes bukan -name
tes:
find /path/to/folder -iname '*bat*'
Saya perhatikan semua file Anda berakhir .c
. Jika Anda hanya ingin menemukan file seperti itu, gunakan:
find /path/to/folder -name '*bat*.c'
Saya perhatikan semua nama file Anda ada bat
di bagian paling awal atau paling akhir sebelum .c
suffix. Jika Anda ingin menghindari pencocokan file seperti embattled.c
, Anda dapat menggunakan:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o
adalah operator atau .
Untuk menemukan hanya file biasa - dan bukan folder, tautan simbolik, dan simpul perangkat khusus - yang dapat Anda gunakan -type f
. Ini sering direkomendasikan dan kadang-kadang cukup tepat ... tetapi sering kali bukan yang Anda inginkan , terutama jika Anda berlari find
dengan tujuan memeriksa output sendiri. Jika Anda memiliki tautan simbolis yang cocok dengan pencarian Anda, tidakkah Anda ingin mengetahuinya?
Jika Anda ingin menemukan file biasa dan tautan simbolik, Anda dapat menggunakan:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Itu menggunakan -o
operator dan juga tanda kurung untuk pengelompokan (yang harus dikutip agar shell tidak memperlakukan mereka secara khusus; jika tidak, Anda akan mendapatkan kesalahan sintaksis).
Tetapi misalkan Anda hanya ingin melihat tautan simbolis yang pada akhirnya mengarah ke file biasa (dan bukan tautan simbolis ke direktori, simpul perangkat, dll.). Itu sebenarnya lebih sederhana: gunakan -xtype
bukan -type
. Asalkan Anda tidak menjalankan find
dengan -L
bendera, -xtype
pada tautan simbolik menguji jenis file yang ditunjukkan oleh tautan tersebut.
find /path/to/folder -name '*bat*' -xtype f
Jika Anda memiliki symlink ke symlink lain ke sebuah file, -xtype f
akan cocok dengan itu meskipun target langsungnya adalah symlink lain daripada file biasa. Ini hampir selalu yang Anda inginkan.
Seringkali orang mengira mereka menginginkannya -type f
, tetapi sebenarnya mereka menginginkannya -xtype f
.
find
Tindakan default jika Anda tidak menentukan satu adalah -print
. Semua perintah yang diberikan di atas setara dengan diri mereka sendiri dengan -print
ditempel di akhir.
find
sering digunakan untuk menjalankan perintah berdasarkan file yang ditemukan - seringkali, perintah yang membuat perubahan. Tetapi ada juga tindakan lain yang tujuannya adalah untuk menampilkan hasil, selain itu -print
. Yang menarik adalah -ls
:
find /path/to/folder -name '*bat*' -ls
Ini memberikan informasi terperinci tentang setiap file, dalam format multi-kolom, mirip dengan (meskipun tidak sama dengan) apa yang akan Anda lihat dengan menjalankan .ls file
Untuk informasi lebih lanjut tentang find
dan cara lain untuk menemukan file, lihat:
find
halaman pengguna , dapat diakses secara online atau dengan menjalankan man find
di terminal.find
, locate
, dan xargs
utilitas.-xtype
nasihatnya; mungkin ls *bat*
dan -maxdepth
/ mindepth
juga layak disebut.
ls
sudah dibahas , saya fokus pada kasus rekursif dengan di find
sini. Tentu saja, jawaban terperinci yang mencakup daftar nama file yang tidak (atau kurang) rekursif cocok dengan beberapa pola ( ls
dan find
dengan -maxdepth
) juga akan berguna. Anda mungkin ingin memposting jawaban seperti itu!
Cara termudah adalah menjalankannya
locate bat
Dengan cara ini Anda dapat mencari di seluruh komputer file yang berisi "bat" dalam nama file
Untuk menyegarkan daftar file di PC Anda dijalankan
updatedb
Jalankan perintah ini ketika Anda baru saja menambahkan file baru ke akun Anda
updatetdb
updatedb
terakhir secara manual atau secara otomatis dijalankan), sudo updatedb
perlu dijalankan terlebih dahulu, ya.
bat
.
find /
sebagai locate
pencarian dari database, sementara find
daftar rekursif /
dan kemudian cocok dengan regex.
Buka terminal dan ubah direktori ke direktori dari mana Anda ingin mulai mencari dan kemudian jalankan perintah ini:
find . -name "*bat*" -type f
The .
dimulai perintah find dari direktori saat ini.
The -name
cocok string bat
dan kasus sensitif. ( -iname
Peka terhadap huruf)
The -type f
pencarian untuk file saja.
Jika file-file tersebut dalam direktori saat ini gunakan:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Atau (memilikinya baris demi baris):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Jika Anda ingin mencari sistem untuk file-file itu, gunakan:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
Anda ingin menggunakan find
perintah, dengan -iname
opsi untuk pencocokan nama file case sensitif, atau -name
opsi untuk nama file case sensitif cocok. Keduanya akan memungkinkan Anda menggunakan nama wildcard. Jadi, untuk menemukan nama file yang berisi "bat", Anda akan menggunakan:
find / -iname '*bat*'
Atau
find / -name '*bat*'
The *
berarti "karakter (s)", sehingga pencarian mencari bat
dengan karakter, termasuk tidak ada, sebelum atau setelah itu. The /
pencarian dari direktori root rekursif, Anda dapat menggunakan .
yang akan mencari secara rekursif dari direktori saat ini, atau path absolut untuk di mana Anda ingin mencari dari. Lihatlah bagaimana mencari file menggunakan regex di skrip shell linux
-type f
, yang tidak lebih dari sekadar mengecualikan direktori dan seringkali bukan apa yang benar-benar diinginkan pengguna .
Gunakan yang lama yang baik find
.
find <path_for_search> -type f -iname "*bat*"
misalnya.:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
dari man find
:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.