Wie man ack benutzt, um nach dem Dateinamen zu suchen

15

Ich habe angefangen, ack zu verwenden, das viel schneller ist als grep. Mit ack möchte ich jedoch nach Dateinamen und nicht nach Dateiinhalten suchen. Gibt es eine Möglichkeit, das zu tun?

Nadal
quelle

Antworten:

16

Verwenden Sie das richtige Werkzeug für den richtigen Job. Wenn Sie nach Dateinamen suchen möchten, verwenden Sie 'find':

$ # search for all *.txt file in current directory
$ find . -iname "*.txt"
Lüge Ryan
quelle
1
sehr richtig. "Sobald Sie einen Hammer in der Hand halten, fängt alles an, wie ein Nagel auszusehen" :)
Akira
2
Nun, ack (und grep) sind netter, weil Sie sich nicht explizit mit Regexen auseinandersetzen müssen, es sei denn, Sie möchten. Normalerweise mache ich nur einenfind . | ack whatev.ext
Ehtesh Choudhury
Dies funktioniert auch beim Auffinden von Verzeichnissen.
Pratik Khadloya
1
find und ack verhalten sich unterschiedlich, da ack standardmäßig viele Ergebnisse (Inhalte von Versionskontrollverzeichnissen, kompilierte Objekte in einem Quellrepository) herausfiltert, die von find eingeschlossen würden. Der beste Hammer hängt von den gewünschten Ergebnissen ab.
Joshua Goldberg
1
Dies beantwortet nicht die Frage ...
lajarre
23
ack -g REGEX

Druckt Dateien, deren relativer Pfad + Dateiname mit REGEX übereinstimmt

Danil Kutkevich
quelle
1
füge [^/]*$deiner REGEX hinzu, um nur im Dateinamen zu suchen
simon
7

Ich bin damit einverstanden, dass es sinnvoll ist, find zu verwenden, wenn Sie nur nach * .txt-Dateien suchen. Ack verfügt jedoch über leistungsstarke Funktionen zur Erkennung von Dateitypen, die Sie verwenden können

ack -f --perl

Hier werden alle Perl-Dateien basierend auf dem Dateinamen (* .pm, * .pl, * .t und * .pod) und der Shebang-Zeile gefunden.

Andy Lester
quelle
1

Du kannst tun :

ack -f | ack "filename.ext"
Olivier
quelle