Rechercher TOUS les fichiers avec ack


14

Comment puis-je rechercher tous les fichiers (y compris binaires) dans le répertoire actuel avec ackv2?

Je veux faire la même chose que faire ack 'foo' **, mais juste avec un indicateur, donc cela fonctionne si je veux rechercher tous les fichiers dans un répertoire spécifique sans ajouter **.


Différence entre ack 'foo'et 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

Pourquoi voulez-vous utiliser ack pour cela au lieu de grep?
Andy Lester

1
@AndyLester Je pensais que c'était acktoujours mieux que grep. J'avais tort :).
Tyilo

Réponses:


6

Par défaut, Ack recherche un modèle dans tous les fichiers non binaires sous le répertoire actuel.

Je crois que les anciennes versions Ack rechercheraient dans les fichiers binaires lorsque vous leur auriez passé le --binarydrapeau. Ce drapeau a cependant été supprimé. Vous pourrez peut-être utiliser grep à la place.

grep -ar 'foo' .

Cela n'a rien à voir avec les liens symboliques. Cela concerne les fichiers binaires!
Tyilo

@Tyilo: J'ai modifié ma réponse.

13

Lorsque vous ne transmettez aucun nom de fichier à ack, il fonctionne sur un ensemble de fichiers par défaut intégré qui exclut les fichiers binaires non reconnus. Si vous transmettez des noms de fichiers, il recherche tous les fichiers que vous transmettez. Cela explique la différence entre ack fooet ack foo **.

ack 1

Dans ack 1.x, utilisez l'indicateur -apour dire à ack de ne pas ignorer les fichiers dont il ne reconnaît pas le type.

Vous pouvez faire un alias si vous voulez ce drapeau le plus souvent: ajoutez la ligne alias ack='ack -a'dans votre ~/.bashrcou ~/.zshrc. Si vous configurez cet alias et souhaitez appeler acksans l'option, appelez \ack(la barre oblique inverse désactive l'expansion d'alias). Les scripts ne sont pas affectés par l'alias, uniquement les shells interactifs.

Alternativement, vous pouvez ajouter l' -aoption à votre ~/.ackrc.

Les correspondances dans les fichiers binaires seront répertoriées comme «correspondances de test1 du fichier binaire». Il n'y a aucun moyen de désactiver ce comportement sans modifier Ack lui-même (au moins en ajoutant un plugin).

ack 2

Dans ack 2.0, l' -aoption a été supprimée. Ce que vous pouvez faire à la place est de définir un type qui correspond à tous les fichiers et d'utiliser l' -koption pour que ack inclue tous les fichiers de ce type. Notez que les types de fichiers sont traités dans un ordre imprévisible, ce qui entraînera un ensemble aléatoire de types binaires à traiter comme ordinaire plutôt que comme le type habituel.

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

De cette façon, les correspondances sont imprimées même pour les fichiers qui auraient autrement l'air binaires. Comme ci-dessus, vous pouvez ajouter ces options à un alias ou à votre .ackrc.


1
C'est assez sournois, @ Gilles.
Andy Lester

@AndyLester, pourquoi l'option -a a-t-elle été supprimée? Le "C'est parce que" dans le retour n'explique pas vraiment pourquoi je ne peux plus rechercher les types de fichiers non reconnus.
Yann Dìnendal

Parce que le comportement -a de 1.x, pour rechercher tous les fichiers texte non reconnus, est désormais la valeur par défaut dans 2.0.
Andy Lester

2
Bizarre, j'ai un fichier js minifié que même ce jeu de caractères spécial de type tous types ne peut pas trouver ...
Izkata

Je suis ici à cause de cela: un texte à l'intérieur d'un fichier js minifié, qui n'est pas analysé par ack. Je pensais que la réponse serait comme "ajouter -a" ... Je suis déçu.
Luciano Fantuzzi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.