Terminalde belirli metin içeren dosyalar nasıl bulunur


168

Belirli bir metin dizesi içeren tüm dosyaları bulmak istiyorum. Terminalde bunu nasıl yaparsın?


Hızlı bir sonuç almak istiyorsanız, Spotlight kullanın. Ayrıca, metinleri PDF veya ODF gibi doğrudan dosya içinde saklamanız gerekmeyen dosyaları bulmak istiyorsanız.
Joey,

İyi tavsiye, ama benim durumumda, dosyaların ağ sürücülerinde olduğundan endekslendiğinden emin değilim. Ve ayrıca belirli bir programa ait xml dosyalarıdır.
Svish

Unix.stackexchange.com/a/37932/213832 adresine bir göz atın bu çözüm iyi çalışıyor
boyd4715

Yanıtlar:


280
grep -r 'text goes here' path_goes_here

1
Ben man grepgrep tüm harika seçenekleri keşfetmek için bir öneriyorum
Ludovic Kuty

Bu, yoldaki her dosyayı listeler ve ekler: No such file or directory Yalnızca metin olaylarının listesini almaya çalışıyorum. Bu listeyi nasıl alabiliriz?
CP3O

7
Anladım grep -lr "text pattern" ./ -s:; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O

Ancak bu, dosya ayrıntılarının (ad, yol) değil, eşleşen dosyaların içeriğini döndürür. @ CP3O'nun önerisi işe yarıyor.
geotheory

28

spot ışığı kullan

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

bakmayı unutma:

man mdfind

2
Bu, spot ışığı endekslemeyen dosyalar için işe yarar mı (yani, gizli klasörler içindeki dosyalar, sistem yapılandırma dosyaları, vb.)
Peter Berg

Grep, .xlsx dosyalarını ayrıştırıyor gibi görünmüyor, ancak bu iyi sonuç verdi. Bir başka kolay örnek: mdfind -onlyin. "
searchtext

11
  1. Ack sayesinde

brew install ack ack "text goes here"

  1. Bulmak yoluyla

find . |grep "text goes here"

  1. Grep ile

grep -RnslI "text goes here"


4

İsteğinize ve ihtiyaçlarınıza bağlı olarak aşağıdakilerden birini seçebilirsiniz. Metin içeren dosyaları aramanız gerektiğini varsayalım - "asenkron", geçerli dizinde yinelemeli olarak, bunu aşağıdaki yollardan biriyle yapabilirsiniz:

Grep kullanımı görüntü tanımını buraya girin

Ack kullanarak görüntü tanımını buraya girin


2

Ignacio'nun Cevabı harika ve belirli bir metni içeren dosyaları bulmama yardım etti. Karşılaştığım tek sorun, bu komutu çalıştırırken, desenin görünmediği yerler de dahil olmak üzere tüm dosyaların listelenmesiydi.

No such file or directory Bu, deseni içermeyen dosyaların yanında gördüğüm şey.

Bunun yerine -s, aşağıdaki gibi komuta eklerseniz grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH DIRECTORY] -skullanıldıysa, yalnızca hangi dosyaların deseni içerdiğini gösterecektir.

Benzer şekilde eğer grep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -skomut, dosyayı ve satır numarasını ve kalıbın oluşumunu yazdırır.

Anlayışım yanlışsa lütfen beni düzeltin.

Referans: 'Böyle bir dosya ya da dizin yok' hatalarını nasıl yazdırabilirim?


Bu sinir bozucu önlemek için başka bir yolu Böyle bir dosya hatası yok , stderr null boru. grep ... 2>/dev/null. Bu çözüm çoğu program için çalışır, çünkü stdout'taki stderr akışındaki hata mesajlarını bildirirler. Bu çözümü birçok kez kullandım find, pek çok dosya için İzin Verilmediğini söylüyor .
jpaugh

(1) Mevcut No such file or directorydosyalar için mesaj alıyorsanız, ya yanlış bir şey yapıyorsunuz ya da sisteminiz bozuk. (2) Bir [PATH OF PARENT]şeyle ne ilgisi var?
G-Man

@ G-Man, [PATH OF DIRECTORY]tanıdık olmayan birini neden koyduğumu bilmek istediğini belirtmek için cevabı değiştirdim./
CP3O

@ G-Man Ubuntu değil mac kullanıyorum, sistemimin nasıl kırılacağından emin değilim, henüz bir şey yapmadım.
CP3O
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.