Warum durchsucht ack nicht standardmäßig alle Dateien rekursiv?

2190
theicfire

Von allem was ich lesen kann

ack-grep foo 

sollte alle Dateien im aktuellen Verzeichnis und den Unterverzeichnissen nach dem Begriff "foo" durchsuchen.

Das nächste, was ich bekommen kann, ist jedoch

ack-grep foo * 

Gibt alle Ergebnisse zurück, die "foo" im aktuellen Verzeichnis haben.

Warum funktioniert der erste Befehl nicht? Ich verwende ackVersion 1.92.

3
Ist Ihr "ack-grep" dasselbe wie "ack"? Wenn ja, welche Version? slhck vor 11 Jahren 0
Ich habe ack mit ack-grep verknüpft. Die Verison ist 1.92 theicfire vor 11 Jahren 0
Haben Sie `ACK_OPTIONS` oder eine` ackrc`-Datei? Dh funktioniert es mit `--noenv`? slhck vor 11 Jahren 0
Nichts von `echo $ ACK_OPTIONS` | `~ / .ackrc` beendet | nicht "ack-grep --noenv stuff" funktioniert nicht, während "ack-grep --noenv stuff *" funktioniert theicfire vor 11 Jahren 0
Im Allgemeinen geben Sie in der Befehlszeile keine Dateien mit "ack" an. Dies ist, was Sie mit "ack foo *" tun. Wenn Sie Dateien angeben, dann sagen Sie ack, dass keine seiner magischen Dateien ausgewählt werden soll. Dazu gehört auch das Rekursieren in untere Verzeichnisse. Andy Lester vor 11 Jahren 0

1 Antwort auf die Frage

3
Peter.O

Es hängt davon ab, was tatsächlich in ist foo, oder wenn Sie gesagt haben, ack-grepzu erkennen, es als einetype

# using ack-grep Version 1.92  mkdir junk; cd junk  echo 'hello' > wango ack-grep hello # nothing found, because 'wango' is an unknown type  echo -e '#!/bin/bash\nhello' > wango ack-grep hello # found, because '#!/bin/bash` identifies a known type wango 2:hello  echo 'hello' > wango ack-grep -a hello # found, because '-a' selects all files (almost all) wango 1:hello 

Von man ack-grep

ack-grep ist intelligent über die Dateien, die es durchsucht. Es kennt bestimmte Dateitypen, die auf der Dateierweiterung und in einigen Fällen auf dem Inhalt der Datei basieren. Diese Auswahl kann mit der Option --type getroffen werden.

Ohne Dateiauswahl durchsucht ack-grep nur Dateien mit erkannten Typen. Wenn Sie eine Datei namens foo.wango haben und ack-grep nicht weiß, was eine .wango-Datei ist, wird sie von ack-grep nicht durchsucht.

Die Option -a weist ack-grep an, alle Dateien unabhängig vom Typ auszuwählen.

Einige Dateien werden niemals von ack-grep ausgewählt, auch nicht mit -a, einschließlich:

· Sicherungsdateien: Dateien, die mit # * # übereinstimmen oder mit ~ enden.

· Coredumps: Dateien, die dem Kern entsprechen. \ D +

Ack-grep durchsucht jedoch immer die in der Befehlszeile angegebenen Dateien, unabhängig vom Typ. Durch Angabe der Option -u werden außerdem alle Dateien durchsucht.

Genial! Vielen Dank; Ich bin auf dieses Problem gestoßen, weil ich ack für Coffeescript und Lenker verwendet habe. Ich wusste nicht, dass diese Dateien besonders sind. Ich habe eine schnelle Lösung gefunden: http://effectif.com/coffeescript/using-ack-with-coffeescript theicfire vor 11 Jahren 1