GNU/Linux >> Belajar Linux >  >> Linux

Pencarian file kabur di konsol linux

Sebagian besar dari jawaban ini tidak akan melakukan pencarian kabur seperti teks luhur melakukannya -- mereka mungkin cocok dengan sebagian dari jawaban, tetapi mereka tidak melakukan perilaku 'cukup temukan semua huruf dalam urutan ini' yang baik.

Saya pikir ini sedikit lebih dekat dengan apa yang Anda inginkan. Saya menyusun versi khusus cd ('fcd') yang menggunakan pencarian fuzzy untuk menemukan direktori target. Sangat sederhana -- cukup tambahkan ini ke bashrc Anda:

function joinstr { local IFS="$1"; shift; echo "$*"; }
function fcd { cd $(joinstr \* $(echo "$*" | fold -w1))* }

Ini akan menambahkan * di antara setiap huruf di input, jadi jika saya ingin pergi ke, misalnya,

/home/dave/results/sample/today

Saya cukup mengetik salah satu dari berikut ini:

fcd /h/d/r/spl/t
fcd /h/d/r/s/t
fcd /h/d/r/sam/t
fcd /h/d/r/s/ty

Menggunakan yang pertama sebagai contoh, ini akan mengeksekusi cd /*h*/*d*/*r*/*s*p*l*/*t* dan biarkan shell memilah apa yang benar-benar cocok.

Selama karakter pertama benar, dan satu huruf dari setiap direktori di jalur ditulis, itu akan menemukan apa yang Anda cari. Mungkin Anda dapat menyesuaikan ini untuk kebutuhan Anda? Bagian yang penting adalah:

$(joinstr \* $(echo "$*" | fold -w1))*

yang membuat string penelusuran kabur.


Anda mungkin menemukan fzf berguna. Ini adalah pencari fuzzy tujuan umum yang ditulis dalam Go yang dapat digunakan dengan daftar hal apa pun:file, proses, riwayat perintah, cabang git, dll.

Skrip pemasangannya akan mengatur CTRL-T pengikat kunci untuk shell Anda. GIF berikut menunjukkan cara kerjanya.


Saya biasanya menggunakan:

ls -R | grep  -i [whatever I can remember of the file name]

Dari direktori di atas tempat saya mengharapkan file tersebut - semakin tinggi Anda membuka pohon direktori, semakin lambat prosesnya.

Ketika saya menemukan nama file yang tepat, saya menggunakannya di find:

find . [discovered file name]

Ini dapat diciutkan menjadi satu baris:

for f in $(ls --color=never -R | grep --color=never -i partialName); do find -name $f; done

(Saya menemukan masalah dengan ls dan grep alias "--color=auto")


Linux
  1. Cara Menemukan File Terlama Di Pohon Direktori Di Linux

  2. 10 Temukan Perintah untuk meningkatkan pencarian file Anda di Linux [Dasar-dasar]

  3. Temukan File dengan Perintah Temukan dan Temukan di Linux

  1. Cara Mencari dan Menghapus Direktori Secara Rekursif di Linux

  2. Temukan file lalu cd ke direktori itu di Linux

  3. Linux menghapus file dengan ukuran 0

  1. Cara menemukan File di Linux

  2. Linux – Bagaimana Menemukan Tanggal Pembuatan File?

  3. Linux temukan/cari partisi root HANYA?