Comment puis-je rechercher tous les fichiers (y compris binaires) dans le répertoire actuel avec ack
v2?
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
ack
toujours mieux quegrep
. J'avais tort :).Réponses:
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
--binary
drapeau. Ce drapeau a cependant été supprimé. Vous pourrez peut-être utiliser grep à la place.la source
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 foo
etack foo **
.ack 1
Dans ack 1.x, utilisez l'indicateur
-a
pour 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~/.bashrc
ou~/.zshrc
. Si vous configurez cet alias et souhaitez appelerack
sans 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'
-a
option à 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'
-a
option 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'-k
option 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.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
.la source