Cara menemukan file teks yang berisi kata tertentu di dalamnya (bukan dalam namanya)

117

Saya ingin menemukan file teks di hard disk saya yang berisi kata tertentu.

Sebelum Ubuntu 12.4 saya dulu memulai di dasbor aplikasi, saya pikir itu disebut "Cari file ...", yang ikonnya adalah kaca pembesar. Saya tidak dapat menemukan aplikasi sederhana itu lagi.

Seseorang
sumber

Jawaban:

198

Anda dapat menggunakan grepperintah dari terminal:

 grep -r word *

Perintah ini akan menemukan semua kemunculan "kata" di semua file di bawah direktori saat ini (atau subdirektori).

Kapel Steve
sumber
9
Tanda bintang tidak cocok dengan file tersembunyi. Untuk mencari semua file yang dapat Anda jalankan grep -r word ..
Ian Mackinnon
jika grep dipanggil dari skrip shell, maka kata kunci pencarian mungkin tidak dicetak yang disorot, tetapi --color=autoflag dapat menyelesaikannya.
noobninja
67

Instal gnome-search-tool.

sudo apt-get install gnome-search-tool

Buka Search for filespilih Select More Optionsdan


masukkan deskripsi gambar di sini

hingev
sumber
1
apakah Anda harus memulai ulang OS agar ini berfungsi? atau mungkin tidak berfungsi dalam 12?
jcollum
Apakah Anda sudah selesai menginstal bagian? Saya cukup yakin itu harus bekerja, ini berfungsi pada 13,04.
hingev
which gnome-search-tool= /usr/bin/gnome-search-tool... tetapi ketika saya membuka opsi pencarian di gnome (Pergi, Cari file ...) tidak ada pilihan untuk "Pilih Opsi Lainnya"
jcollum
1
buka dengan mengetik terminal: gnome-search-tooldan saya yakin Anda akan melihatnya.
hingev
Anda dapat meluncurkan alat pencarian-gnome melalui tanda "Cari file", sehingga Anda tidak memerlukan terminal.
Bernard Decock
6

Berikut ini adalah ikhtisar dari berbagai metode yang dapat digunakan seseorang untuk mencari file untuk string teks tertentu, dengan beberapa opsi yang ditambahkan secara khusus untuk bekerja hanya dengan file teks, dan mengabaikan file biner / aplikasi.

Orang harus mencatat, bagaimanapun, bahwa pencarian kata bisa menjadi sedikit rumit, karena sebagian besar alat pencocokan garis akan mencoba untuk menemukan kata di mana saja di telepon. Jika kita berbicara tentang kata sebagai string yang dapat muncul di awal atau akhir baris, atau sendirian di telepon, atau dikelilingi oleh spasi dan / atau tanda baca - saat itulah kita akan memerlukan ekspresi reguler, dan terutama yang datang dari Perl. Di sini, misalnya, kita dapat menggunakan -Pdi grepmemanfaatkan Perl ekspresi reguler untuk mengelilingi itu.

$ printf "A-well-a don't you know about the bird?\nWell, everybody knows that the bird is a word" | grep -noP '\bbird\b'                                               
1:bird
2:bird

Grep sederhana

$ grep -rIH  'word'
  • -r untuk pencarian rekursif turun dari direktori saat ini
  • -I untuk mengabaikan file biner
  • -H untuk menampilkan nama file tempat ditemukan kecocokan

Cocok untuk pencarian saja.

temukan + grep

$ find -type f -exec grep -IH 'word' {} \;
  • find melakukan bagian pencarian rekursif
  • -I opsinya adalah mengabaikan file biner
  • -H untuk menampilkan nama file tempat baris ditemukan
  • pendekatan yang baik untuk digabungkan dengan perintah lain dalam subkulit, seperti:

    $ find -type f -exec sh -c 'grep -IHq "word" "$1" && echo "Found in $1"' sh {} \;
    

Perl

#!/usr/bin/env perl
use File::Find;
use strict;
use warnings;

sub find_word{
    return unless -f;
    if (open(my $fh, $File::Find::name)){
        while(my $line = <$fh>){
            if ($line =~ /\bword\b/){
                printf "%s\n", $File::Find::name;
                close($fh);
                return;
            }
        }
    }
}

# this assumes we're going down from current working directory
find({ wanted => \&find_word, no_chdir => 1 },".")

poor-mans grep rekursif dalam skrip bash rekursif

Ini adalah "cara bash". Tidak ideal, mungkin tidak ada alasan yang baik untuk menggunakan ini ketika Anda menginstal grepatau perlmenginstal.

#!/usr/bin/env bash
shopt -s globstar
#set -x
grep_line(){
    # note that this is simple pattern matching 
    # If we wanted to search for whole words, we could use
    # word|word\ |\ word|\ word\ )
    # although when we consider punctuation characters as well - it gets more
    # complex
    case "$1" in
        *word*) printf "%s\n" "$2";;
    esac
}
readlines(){
    #  line count variable can be used to output on which line match occured

    #line_count=1
    while IFS= read -r line;
    do
        grep_line "$line" "$filename"
        #line_count=$(($line_count+1))
    done < "$1"
}

is_text_file(){
    # alternatively, mimetype command could be used
    # with *\ text\/* as pattern in case statement
    case "$(file -b --mime-type "$1")" in
        text\/*) return 0;;
        *) return 1;;
    esac
}

main(){
    for filename in ./**/*
    do
        if [ -f "$filename" ] && is_text_file "$filename"
        then
            readlines "$filename"
        fi
    done
}
main "$@"
Sergiy Kolodyazhnyy
sumber
4

Pertanyaannya cukup lama ... lagi pula ... saat ini (2016) ada aplikasi gnome bernama tracker(Anda dapat menemukannya di repositori ubuntu) yang dapat diinstal untuk mencari teks di dalam file (mencoba odt-ods-odp-pdf) . Paket ini dilengkapi dengan 4 paket lain untuk diinstal (pelacak-ekstrak, pelacak-gui, pelacak-penambang-fs, pelacak-utils) Namastè :)

cico
sumber
Tracker adalah perangkat lunak yang baik tetapi memerlukan indeks untuk sudah mengandung info tentang file yang Anda tertarik untuk menemukannya dengan pencarian. Menggunakan sumber daya lebih sedikit daripada Recoll, saya tidak yakin tentang ukuran indeks. Tetapi jika Anda perlu mencari file dengan teks tertentu dan ingin melakukannya dengan gui, gnome-search-tool memecahkan masalah tanpa indeks. Itu adalah aplikasi default di versi Ubuntu sebelumnya, saya tidak tahu mengapa mereka menghapusnya tanpa penggantian.
Hatoru Hansou
2

Ya, saya tahu Anda mencari aplikasi gui dan ini adalah posting lama, tapi mungkin ini bisa membantu seseorang. Saya menemukan util ack-grep. Pertama instal via sudo apt-get install ack-greplalu jalankan perintah ack-grep what_you_looking_fordi direktori tempat Anda ingin mencari. Ini menunjukkan kepada Anda semua file yang merupakan teks Anda dan juga menampilkan pratinjau dari file ini. Dan ini sangat penting bagi saya.

spajdo
sumber
0

Lebih sederhana dan lebih cepat adalah "pencari perak" sudo apt-get install silversearcher-ag. Lihatlah https://github.com/ggreer/the_silver_searcher untuk reassons mengapa lebih baik daripada ack * di antara yang lain.

Diego Andrés Díaz Espinoza
sumber