TÜM dosyaları ack ile ara


14

Geçerli dizindeki tüm dosyaları (ikili dahil) ackv2 ile nasıl arayabilirim ?

Yapmakla aynı şeyi yapmak istiyorum ack 'foo' **, ama sadece bir bayrakla, bu yüzden eklemeden belirli bir dizindeki tüm dosyaları aramak istiyorsam çalışır **.


Fark arasında ack 'foo've ack 'foo' **:

$ mkdir test && cd test
$ printf '\x00\x01foo1\x00' > test1
$ printf 'foo2' > test2
$ ack 'foo'
test2
1:foo2
$ ack 'foo' **
test1
1:foo1

test2
1:foo2

Neden grep yerine bunun için ack kullanmak istiyorsun?
Andy Lester

1
@AndyLester Bunun ackher zamankinden daha iyi olduğunu düşündüm grep. Ben hatalıydım :).
Tyilo

Yanıtlar:


6

Varsayılan olarak Ack, geçerli dizinin altındaki tüm ikili olmayan dosyalarda bir desen arar.

--binaryBayrağı geçtiğinde eski Ack sürümlerinin ikili dosyaları arayacağını düşünüyorum . Bu bayrak kaldırıldı. Bunun yerine grep kullanabilirsiniz.

grep -ar 'foo' .

Simgelerle ilgisi yoktur. İkili dosyalarla ilgili!
Tyilo

@Tyilo: Cevabımı değiştirdim.

13

Ack'e hiçbir dosya adı iletmediğinizde, tanınmayan ikili dosyaları dışlayan yerleşik bir varsayılan dosya kümesinde çalışır. Dosya adlarını iletirseniz, ilettiğiniz tüm dosyaları arar. Bu arasındaki farkı açıklar ack foove ack foo **.

ack 1

Ack 1.x sürümünde, -aack'e türünü tanımadığı dosyaları atlamamasını bildirmek için bayrağı kullanın.

Sen daha sık değil O bayrağı istiyorsanız bir takma ad yapabiliriz: satırı ekleyin alias ack='ack -a'senin içinde ~/.bashrcveya ~/.zshrc. Bu takma adı ayarladıysanız ackve seçenek olmadan aramak istiyorsanız , \ack(ters eğik çizgi takma ad genişletmeyi devre dışı bırakır) arayın . Komut dosyaları takma addan değil, yalnızca etkileşimli kabuklardan etkilenir.

Alternatif olarak, -aseçeneğinize seçenek ekleyebilirsiniz ~/.ackrc.

İkili dosyalardaki eşleşmeler “İkili dosya test1 eşleşmeleri” olarak listelenir. Ack'ın kendisini değiştirmeden (en azından bir eklenti ekleyerek) bu davranışı devre dışı bırakmanın bir yolu yoktur.

akın 2

Ack 2.0 sürümünde -aseçenek kaldırılmıştır. Bunun yerine, tüm dosyalarla eşleşen bir tür tanımlamak ve -kack'un bu türdeki tüm dosyaları içermesini sağlamak için bu seçeneği kullanabilirsiniz . Dosya türlerinin öngörülemeyen bir sırada işlendiğini, bunun için rasgele bir ikili tür kümesinin normal tür yerine sıradan işlenmesine neden olacağını unutmayın.

ack --type-set='all:match:.*' -k foo

Bu şekilde eşleşmeler, aksi takdirde ikili görünen dosyalar için bile yazdırılır. Yukarıdaki gibi, bu seçenekleri bir takma ada veya hesabınıza ekleyebilirsiniz .ackrc.


1
Oldukça sinsi, @Gilles.
Andy Lester

@AndyLester, -a seçeneği neden kaldırıldı? Geri dönüşteki "Bunun nedeni", neden artık tanınmayan dosya türlerini arayamayacağımı açıklamıyor.
Yann Dìnendal

Çünkü 1.x'in -a davranışı, tüm tanınmayan metin dosyalarını aramak, şimdi 2.0'da varsayılan.
Andy Lester

2
Tuhaf, özel bir tip-all-tip
yazı

Bu yüzden buradayım: küçültülmüş bir js dosyasının içindeki bir metin, ack tarafından ayrıştırılmadı. Cevabın "add -a" gibi olacağını düşündüm ... Hayal kırıklığına uğradım.
Luciano Fantuzzi
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.