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:
batDi Mana SajaUntuk menemukan semua file di mana saja di dalam /path/to/folderyang 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 findtidak akan berhasil. ( \*bat\*dan "*bat*"juga bekerja.)
Untuk mencari di folder Anda saat ini (misalnya, bahwa Anda telah cddiedit), 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, bAtdan sebagainya dicocokkan, menggunakan -inametes bukan -nametes:
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 batdi bagian paling awal atau paling akhir sebelum .csuffix. Jika Anda ingin menghindari pencocokan file seperti embattled.c, Anda dapat menggunakan:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-oadalah 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 finddengan 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 -ooperator 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 -xtypebukan -type. Asalkan Anda tidak menjalankan finddengan -Lbendera, -xtypepada 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 fakan 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.
findTindakan default jika Anda tidak menentukan satu adalah -print. Semua perintah yang diberikan di atas setara dengan diri mereka sendiri dengan -printditempel di akhir.
findsering 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 finddan cara lain untuk menemukan file, lihat:
findhalaman pengguna , dapat diakses secara online atau dengan menjalankan man finddi terminal.find, locate, dan xargsutilitas.-xtypenasihatnya; mungkin ls *bat*dan -maxdepth/ mindepthjuga layak disebut.
ls sudah dibahas , saya fokus pada kasus rekursif dengan di findsini. Tentu saja, jawaban terperinci yang mencakup daftar nama file yang tidak (atau kurang) rekursif cocok dengan beberapa pola ( lsdan finddengan -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
updatedbterakhir secara manual atau secara otomatis dijalankan), sudo updatedbperlu dijalankan terlebih dahulu, ya.
bat.
find /sebagai locatepencarian dari database, sementara finddaftar 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 -namecocok string batdan kasus sensitif. ( -inamePeka terhadap huruf)
The -type fpencarian 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 findperintah, dengan -inameopsi untuk pencocokan nama file case sensitif, atau -nameopsi 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 batdengan 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.