it-swarm.dev

Gümüş arayıcıyı kullanarak dosya ve dosya adlarını arayın

Silver Searcher'ı kullanarak nasıl arama yapabilirim:

  1. (ikili olmayan) bir Word veya desene sahip dosyalarVE
  2. tüm dosya adları, ikili dosyaların dosya adlarını içeren bir Word veya şablonla.

Diğer tercihler: büyük/küçük harf duyarsız arama ve dotfiles ile arama yapmak istiyorum.


Bunu çok şanssız kullanmadan takma adı kullanmaya çalıştım:

alias search="ag -g $1 --smart-case --hidden && ag --smart-case --hidden $1"

22
Jikku Jose

ag kullanıcı sayfasına göre

   -G --file-search-regex PATTERN
          Only search files whose names match PATTERN.

Bir modelle eşleşen dosyalarda arama yapmak için -G seçeneğini kullanabilirsiniz. 

Yani sorunuzu cevaplamak için:

[email protected]:~/rpm-4.12.0.1# ag -G cpio.c size
rpm2cpio.c
21:    off_t payload_size;
73:    /* Retrieve payload size and compression type. */
76:     payload_size = headerGetNumber(h, RPMTAG_LONGARCHIVESIZE);

yukarıdaki komut, cpio.c modeliyle eşleşen tüm dosyalarda size kelimesini arar.

Referans:
_ adam sayfası ag sürüm 0.28.0

Not 1:

Belirli dosya türlerinde bir dize arıyorsanız, tüm C kaynakları kodunu söyleyin, aramaları hızlı bir şekilde sınırlandırmanıza yardımcı olmak için belgelenmemiş bir özellik in ag vardır.

Her ikisi de altındaki komutlar tüm php dosyalarında foo arar:

find . -name \*.php -exec grep foo {}
ag --php foo

find + grep tüm .php dosyalarını ararken, ag komutundaki --php anahtarı aslında şu dosya uzantılarını arar:

.php  .phpt  .php3  .php4  .php5  .phtml

C++ kaynak dosyaları için --cpp, --hh dosyaları için .h, JavaScript vb. İçin --js kullanabilirsiniz. Tam liste here

46
vincentleest

Bunu takma adınıza eklemeyi deneyin. Zsh ile test edilmiştir ancak bash ile çalışmalıdır. Örnekte karşılaştığınız sorun, bash takma adlarının parametre alamamasıdır, bu nedenle önce parametreleri kullanmak için bir işlev tanımlamanız ve sonra takma adınızı bu işleve atamanız gerekir.

searchfunction() {
  echo $(ag -g $1 --hidden)
  echo $(ag --hidden -l $1)
}

alias search=searchfunction

Bu örneği, amacınıza uyacak şekilde birkaç şekilde değiştirebilirsiniz;

  • metin sonuçlarının metin eşleşmesini mi yoksa yalnızca dosya adını mı göstermesini isteyip istemediğinize bağlı olarak -l bayrağı ekleyin/kaldırın
  • metin sonuçlarını ve dosya adı sonuçlarını ayırmak için başlıklar ekleyin
  • hem dosya adı hem de metin vb. ile eşleşen dosyaları hesaba katmak için sonuçları tekilleştirme.

[Düzenleme: Gereksiz - Pablo Bianchi'nin yorumuna göre küçük vaka bayrağı kaldırıldı]

5
Greg

Bu soruyu aynı cevabı kendim ararken buldum. ag, dosya ve dizin adlarını aramak için herhangi bir yerel özelliğe sahip gibi görünmüyor. Zach Fogg ve Jikku Jose'nin yukarıdaki cevapları her ikisi de işe yarıyor, ancak eğer büyük bir dizinde çalışıyorsanız, find . piping işlemi çok yavaş olabilir.

find işlevini doğrudan kullanmanızı öneririm; bu, ag işlevini kullanmaktan çok daha hızlıdır:

Linux (find'nin GNU sürümü)

find -name [pattern]

OSX (find'nin BSD sürümü)

find [pattern]

find ile ilgili daha fazla yardıma ihtiyaç duyarsanız, bu rehber Digital Ocean'dan oldukça iyi. Bunu ekliyorum çünkü sadece temel kullanım şeklini anlamak istiyorsanız find için man sayfaları aşırı derecede yoğundur.

4
Greg

Bunu dene:

find . | ag "/.*SEARCHTERM[^/]*$"

find . komutu tüm dosyaları listeler.

Bunun çıktısını, sadece tam yol değil, dosya adındaysa, SEARCHTERM ile eşleşen ag "/.*SEARCHTERM[^/]*$" komutuna yönlendiriyoruz.

4
Zachary Fogg

mdfind, find, locate ve diğer girişimlerden memnun kaldıktan sonra, aşağıdakiler işe yaradı. İlk dosyaların listesini almak için tree, dizinleri filtrelemek için ag ve ardından eşleşen dosyaları kendileri yazdırmak için awk kullanır.

tree kullanarak yaralandım çünkü denediğim ve hızlı olan diğer çözümlerden daha (ve daha kolay) yapılandırılabilirdi.

Bu bir balık işlevidir:

function ff --description 'Find files matching given string'
  tree . --Prune --matchdirs -P "*$argv*" -I "webpack" -i -f --ignore-case -p |
    ag '\[[^d].*' |
    awk '{print $2}'
end

Bu aşağıdakine benzer bir çıktı verir:

~/temp/hello_world $ ff controller
./app/controllers/application_controller.rb
./config/initializers/application_controller_renderer.rb
~/temp/hello_world $
1
jchilders

Önceki cevaplara eklemek için, farklı dosya uzantıları ile eşleşen dosyaları aramak için "Veya" Normal İfade kullanabilirsiniz.

Örneğin, yalnızca bir dize aramak için C++ başlık dosyaları [.hpp] ve Makefiles [.mk])

ag -G '.*\.(hpp|mk)' my_string_to_search

0
djondal