Stephane, meine Antwort ( -maxdepth 1) war skalierbar. Zum Beispiel -maxdepth 2. Ich weiß nicht, wie ich die von Ihnen vorgenommene Bearbeitung beschreiben soll.
David Wilkins
es wird @stephane nicht erreichen, wenn Sie das @ nicht verwenden.
Braiam
4
Ja, leider stimme ich zu, dass meine Bearbeitung zu aufdringlich war. Vielleicht möchten Sie noch klarstellen, dass that ( -maxdepth) keine portable / Standard-Syntax ist (nur GNU und einige BSDs). Außerdem hat die Verwendung \;hier keinen Sinn (eine greppro 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 2wärefind . -path './*/*' -type d -prune -o -type f -exec ...
Stéphane Chazelas
2
Beachten Sie auch, dass Ihre Fehlermeldungen für Verzeichnisse (einschließlich der, .die Sie nicht geben -mindepth 1) geben, während GNU grepnicht versucht, Verzeichnisse mit zu lesen -r(es rekursiert auf ihnen). Möglicherweise möchten Sie eine hinzufügen , -d skipum grep(unter der Annahme GNU grep) oder besser hinzufügen ! -type dzu findoder noch besser -type f(oder -xtype fGNU vorausgesetzt find) , wie Sie wahrscheinlich nicht wollen , grepnicht reguläre Dateien lesen.
Stéphane Chazelas
4
Ich neige dazu, grep -Hindiesen 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.Antworten:
Verwenden Sie
-n
fürno-recurse
: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 :quelle
Sie können find mit dem Argument -exec koppeln. Beispiel:
Dies kann skaliert werden, dh
-maxdepth 2
quelle
-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 (einegrep
pro Datei ausführen ). Verwenden Siegrep -H foo {} +
(GNU-spezifisch) odergrep 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 GNUgrep
nicht versucht, Verzeichnisse mit zu lesen-r
(es rekursiert auf ihnen). Möglicherweise möchten Sie eine hinzufügen ,-d skip
umgrep
(unter der Annahme GNU grep) oder besser hinzufügen! -type d
zufind
oder noch besser-type f
(oder-xtype f
GNU vorausgesetztfind
) , 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.