Linux menemukan nama file dengan string yang diberikan

107

Saya menggunakan Ubuntu, dan saya ingin menemukan semua file di direktori dan subdirektori saat ini yang namanya berisi string "John". Saya tahu itu grepbisa cocok dengan konten di file, tapi saya tidak tahu bagaimana menggunakannya dengan nama file. Bantuan apa pun akan dihargai.

JJ Beck
sumber

Jawaban:

195

Gunakan perintah find ,

find . -type f -name "*John*"
Rich Adams
sumber
1
Membuat skrip bash kustom dengan #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi akan membiarkan Anda berjalan F search-stringsebagai pintasan yang sempurna
Ilia Rostovtsev
@IliaRostovtsev - bagus, tapi [ -z "$1" ]akan sedikit lebih baik.
Joe
@ Joe Ah, benar. Maksud Anda seandainya jalan memiliki spasi? Tapi disini kita hanya memeriksa keberadaan $ 1 space akan membuat $ 2 muncul dan hanya itu. Maksud Anda itu secara teoritis lebih baik, bukan?
Ilia Rostovtsev
@IliaRostovtsev - Sebenarnya, saya salah. Jika $ 1 adalah nol maka pengujian menjadi if [ -z ]. Saya pikir itu akan menjadi kesalahan sintaks, tetapi berhasil. Saya dapat menyederhanakan beberapa kode saya mulai sekarang.
Joe
25

Jawaban yang benar telah diberikan, tetapi bagi Anda untuk belajar bagaimana membantu diri Anda sendiri, saya pikir saya akan memberikan sesuatu yang membantu dengan cara yang berbeda; jika Anda dapat menyimpulkan apa yang ingin Anda capai dalam satu kata, ada fitur bantuan yang sangat bagus di Linux.

man -k <your search term>

Apa yang dilakukannya adalah mencantumkan semua perintah yang memiliki istilah pencarian Anda dalam deskripsi singkat. Biasanya ada peluang bagus bahwa Anda akan menemukan apa yang Anda cari. ;)

Keluaran itu terkadang bisa membuat kewalahan, dan saya merekomendasikan untuk mempersempitnya menjadi file yang dapat dieksekusi, daripada semua halaman manual yang tersedia, seperti:

man -k find | egrep '\(1\)'

atau, jika Anda juga ingin mencari perintah yang membutuhkan tingkat hak istimewa yang lebih tinggi, seperti ini:

man -k find | egrep '\([18]\)'
tink
sumber
3
Saya penasaran ... pertanyaan yang menunjukkan tidak ada upaya untuk menyelesaikan masalah yang dihadapi melalui pencarian mendapat suara positif, penjelasan ramah bagaimana mencari tahu tentang kemungkinan perintah diinjak. Apa saja kriterianya? :)
tink
1
saya memuji Anda. Pelajaran sedikit bisa manusia itu. tetapi kita dapat melihat sampel dan beradaptasi :)
tgkprog
2

The findperintah akan memakan waktu lama karena memindai file nyata dalam sistem file.

Cara tercepat adalah menggunakan locateperintah, yang akan langsung memberikan hasil:

locate "John"

Jika perintah tidak ditemukan, Anda perlu menginstal mlocatepaket dan menjalankan updatedbperintah terlebih dahulu untuk menyiapkan database pencarian untuk pertama kalinya.

Lebih detail di sini: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab

thucnguyen
sumber
1

gunakan ack sederhana. ketik sajaack <string to be searched>

Annu
sumber
Tampaknya ini juga akan menyertakan semua jalur yang berisi teks pencarian, bukan hanya file: stackoverflow.com/questions/7698867/…
underscore_d
1

Ini adalah solusi yang sangat sederhana dengan menggunakan treeperintah di direktori yang ingin Anda cari. -fmenunjukkan jalur file lengkap dan |digunakan untuk menyalurkan output dari pohon grepuntuk menemukan file yang berisi string filenamedalam nama.

tree -f | grep filename
caylus
sumber