Kann ich festlegen ack
, dass nur im aktuellen Ordner nach Text gesucht wird? (oder ein max-depth
Level angeben ?) Und mit grep
?
Kann ich festlegen ack
, dass nur im aktuellen Ordner nach Text gesucht wird? (oder ein max-depth
Level angeben ?) Und mit grep
?
Antworten:
Verwenden Sie -n
für no-recurse
:
$ ack -n foo
grep
ist standardmäßig nicht rekursiv und Sie sollten das -r
Flag nur verwenden, wenn Sie eine rekursive Suche wünschen.
Sie können das aktuelle Verzeichnis grep
folgendermaßen durchsuchen :
$ grep -- foo *
Sie können find mit dem Argument -exec koppeln. Beispiel:
find . -maxdepth 1 -exec grep foo {} \;
Dies kann skaliert werden, dh -maxdepth 2
-maxdepth 1
) war skalierbar. Zum Beispiel -maxdepth 2
. Ich weiß nicht, wie ich die von Ihnen vorgenommene Bearbeitung beschreiben soll.
-maxdepth
) keine portable / Standard-Syntax ist (nur GNU und einige BSDs). Außerdem hat die Verwendung \;
hier keinen Sinn (eine grep
pro Datei ausführen ). Verwenden Sie grep -H foo {} +
(GNU-spezifisch) oder grep foo /dev/null {} +
(Standard), um sicherzustellen, dass der Dateiname immer gedruckt wird. Das Standardäquivalent zu -maxdepth 2
wärefind . -path './*/*' -type d -prune -o -type f -exec ...
.
die Sie nicht geben -mindepth 1
) geben, während GNU grep
nicht versucht, Verzeichnisse mit zu lesen -r
(es rekursiert auf ihnen). Möglicherweise möchten Sie eine hinzufügen , -d skip
um grep
(unter der Annahme GNU grep) oder besser hinzufügen ! -type d
zu find
oder noch besser -type f
(oder -xtype f
GNU vorausgesetzt find
) , wie Sie wahrscheinlich nicht wollen , grep
nicht reguläre Dateien lesen.
grep -Hin
diesen Ansatz zu verwenden, damit ich den Dateinamen und die Zeile sehen kann, in der sich das Vorkommen befindet.
-n
mit Ausnahme der Option, überhaupt nicht zurückzugreifen.