Gizli dosyaları nasıl grep edebilirim?


98

Bir Git deposunda arama yapıyorum ve .gitklasörü dahil etmek istiyorum .

grep çalıştırırsam bu klasörü içermez

grep -r search *

Bu klasörü eklemek için grep komutu ne olurdu?

Yanıtlar:


137

Yaptığınız şeye daha iyi bir alternatif olarak lütfen bu yazının sonundaki çözüme bakın.

Gizli dosyaları açıkça dahil edebilirsiniz (bir dizin aynı zamanda bir dosyadır).

grep -r search * .*

*Gizli dışındaki tüm dosyaları maç olacak ve .*sadece gizli dosyaları maç olacak. Ancak, belirli bir dizinde gizli olmayan dosya yoksa veya gizli dosya yoksa bu başarısız olur. Elbette .gitbunun yerine açıkça ekleyebilirsiniz .*.

Bununla birlikte, sadece belirli bir dizinde aramak istiyorsanız, bunu şu şekilde yapın:

grep -r search .

.Her iki sigara gizli ve gizli dosyaları içerir akım yolu, maç olacak.


1
İlk yaklaşım (grep -r search *. *) Benim için çalıştı. İkinci yaklaşım (grep -r arama) dizeyi bulamadı. "-R" yi atlarken ve yalnızca üst düzey dizinde arama yaparken benzer sonuçlar buldum. GNU grep 2.6.3 kullanıyorum.
Alan

@Alan: Bu tuhaf. Bunu düzenli olarak kullanıyorum. Aynı dizinde denediniz mi?
bitmask

27
kullanımı .*ana dizini içerecek (çünkü ..eşleşiyor)
sehe

1
Bahavior mermiler arasında değişiklik gösterebileceği için bu çözümü genellemek güvenli midir?
astletron

6
ilk sürüm için --exclude-dir = ..
eklemelisiniz

12

Bu problemle az önce karşılaştım ve @ bitmask'in cevabına dayanarak, @sehe'nin işaret ettiği problemden kaçınmak için yaptığım basit değişiklik:

grep -r search_string * .[^.]*

bunu kullanarak herhangi bir sonuç alamıyorum: sudo grep -r ANDROID_HOME * .[^.]*burada neyi yanlış yapıyorum?
messerbill

@messerbill aramayı nerede yürütüyorsunuz?
deli

3

Belki de aşağıdaki gibi eksiksiz bir çözüm için "grep" ile "bul" komutunu birleştirmeyi tercih edersiniz:

find . -exec grep -Hn search {} \;

Bu komut, gizli dosyalar veya dizinlerde "arama" dizesini arayacak ve bu çıktı biçimiyle çakışan tüm dosyaları listeleyecektir:

Dosya yolu: Satır numarası: tesadüflü çizgi

./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line

2

Geçerli dizini aradığınızı varsayarak bu yaklaşımı kullanmak isteyebilirsiniz (aksi takdirde, istenen dizini. İle değiştirin):

find . -type f | xargs grep search

veya yalnızca en üst düzeyde arama yapmak istiyorsanız (bunları deniyorsanız test etmek daha hızlıdır):

find . -type f -maxdepth 1 | xargs grep search

GÜNCELLEME: Scott'ın yorumlarına yanıt olarak örnekleri değiştirdim. Ayrıca "-tip f" ekledim.


1
(1)  ~kullanıcının ev dizinidir. Soru, kullanıcının ana dizini ile ilgili değildi, bu yüzden cevaptan bahsedilmemelidir  ~. (2) Bir  findkomutta, -name '*'işlemsizdir (yani, hiçbir amaca hizmet etmez).
Scott

1

YALNIZCA mevcut konumunuzdaki tüm gizli dosyalar ve dizinlerde arama yapmak için:

find . -name ".*" -exec grep -rs search {} \;

YALNIZCA tüm gizli dosyalar:

find . -name ".*" -type f -exec grep -s search {} \;

YALNIZCA tüm gizli dizinler:

find . -name ".*" -type d -exec grep -rs search {} \;

1

Diğer tüm cevaplar daha iyi. Bunu hatırlamak kolay olabilir:

find . -type f | xargs grep search

Yalnızca dosyaları (gizli olanlar dahil) bulur ve her dosyayı greps eder.


0

Yalnızca belirli bir klasörde bulmak için şunları kullanabilirsiniz:

ls -al | grep " \."

Listelemek ve grep'e yöneltmek çok basit bir komuttur.


0

Tyler'ın önerisine ek olarak, gizli dosyalar dahil tüm dosya ve klasörleri yinelemeli olarak grep etme komutu burada.

find . -name "*.*" -exec grep -li 'search' {} \;

0

Eşleşmeyi önlemek .ve ..gizli olmayan dosyalar için bu örnekte grepolduğu ls -Agibi kullanabilirsiniz :

ls -A | grep "^\."

^\. ilk karakterin olması gerektiğini belirtir .

-AVeya --almost-allopsiyon dışlar sonuçlarını .ve ..bu yüzden sadece gizli dosya ve dizinleri aynı olduğundan.


0

Gizli dizin dosyaları için olduğu gibi belirli gizli dosya türlerini de arayabilirsiniz:

grep -r --include=*.directory "search-string"

Bu, diğer seçeneklerden bazılarından daha iyi çalışabilir. İşe yarayan diğer seçenekler çok yavaş olabilir.

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.