Cari SEMUA file dengan ack


14

Bagaimana saya bisa mencari semua file (termasuk biner) di direktori saat ini dengan ackv2?

Saya ingin melakukan hal yang sama seperti melakukan ack 'foo' **, tetapi hanya dengan sebuah flag, jadi itu berfungsi jika saya ingin mencari semua file dalam direktori tertentu tanpa menambahkan **.


Perbedaan antara ack 'foo'dan 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

Mengapa Anda ingin menggunakan ack untuk ini, bukan grep?
Andy Lester

1
@AndyLester Saya hanya berpikir itu ackselalu lebih baik daripada grep. Saya salah :).
Tyilo

Jawaban:


6

Secara default, Ack mencari pola di semua file non-biner di bawah direktori saat ini.

Saya percaya versi Ack yang lebih lama akan mencari melalui file biner ketika Anda memberikannya --binaryflag. Bendera ini sudah dihapus. Anda mungkin bisa menggunakan grep saja.

grep -ar 'foo' .

Itu tidak ada hubungannya dengan symlinks. Ini ada hubungannya dengan file biner!
Tyilo

@ Tyilo: Saya telah mengubah jawaban saya.

13

Ketika Anda tidak memberikan nama file ke ack, ia beroperasi pada set file bawaan bawaan yang tidak termasuk file biner yang tidak dikenal. Jika Anda memberikan nama file, itu akan mencari di semua file yang Anda berikan. Ini menjelaskan perbedaan antara ack foodan ack foo **.

ack 1

Di ack 1.x, gunakan flag -auntuk memberi tahu ack untuk tidak melewatkan file yang tipenya tidak dikenali.

Anda dapat membuat alias jika Anda ingin bendera itu lebih sering daripada tidak: tambahkan baris alias ack='ack -a'di ~/.bashrcatau ~/.zshrc. Jika Anda mengatur alias ini dan ingin menelepon acktanpa opsi, panggil \ack(backslash menonaktifkan ekspansi alias). Script tidak terpengaruh oleh alias, hanya shell interaktif.

Atau, Anda dapat menambahkan -aopsi ke ~/.ackrc.

Kecocokan dalam file biner akan terdaftar sebagai "File biner test1 cocok". Tidak ada cara untuk menonaktifkan perilaku ini tanpa memodifikasi Ack itu sendiri (setidaknya menambahkan plugin).

ACK 2

Di ack 2.0, -aopsi telah dihapus. Yang bisa Anda lakukan adalah mendefinisikan suatu tipe yang cocok dengan semua file, dan menggunakan -kopsi untuk membuat ack memasukkan semua file dari tipe itu. Perhatikan bahwa jenis file diproses dalam urutan yang tidak dapat diprediksi, untuk hal ini akan menyebabkan serangkaian acak jenis biner diproses seperti biasa dan bukan tipe biasa.

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

Dengan cara ini kecocokan dicetak bahkan untuk file yang jika tidak akan terlihat biner. Seperti di atas, Anda dapat menambahkan opsi ini ke alias atau ke .ackrc.


1
Sangat licik, @Gilles.
Andy Lester

@ AndyLester, mengapa opsi -a dihapus? "Ini karena" sebagai balasannya tidak benar-benar menjelaskan mengapa saya tidak dapat mencari jenis file yang tidak dikenal lagi.
Yann Dìnendal

Karena 1.x's -a behaviour, untuk mencari semua file teks yang tidak dikenal, sekarang menjadi default dalam 2.0.
Andy Lester

2
Aneh, saya punya file js yang diperkecil yang bahkan tidak dapat ditemukan oleh semua jenis-jenis yang cocok ...
Izkata

Saya di sini karena itu: teks di dalam file js yang diperkecil, yang tidak diuraikan oleh ack. Saya pikir jawabannya akan seperti "tambah-a" ... Saya kecewa.
Luciano Fantuzzi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.