Wenn ich mit xenserver arbeite, möchte ich für jede Datei in einem Verzeichnis einen Befehl ausführen, einige Dinge aus der Ausgabe des Befehls entfernen und in eine Datei einfügen.
Ich weiß genau, welchen Befehl ich verwenden möchte und wie ich Zeichenfolgen nach Bedarf abrufen kann.
Was mir jedoch nicht klar ist, ist, wie ich diesen Befehl für jede Datei ausführen soll, um zur nächsten zu gelangen, bis keine Dateien mehr gefunden werden.
grep $PATTERN *.cpp *.h
. Wenn Sie spezifischere Regeln für die zu greifenden Dateien benötigen, verwenden Sie denfind
Befehl (überprüfen Sie Robs Antwort).grep -r x .
Ergebnisse ausführe, kommen sie aus allen Dateien aller Erweiterungen. Wenn ich renne,grep -r x *.scss
erhalte ich keine Ergebnisse.*.scss
Dateien im aktuellen Verzeichnis haben, sondern irgendwo tiefer in den Unterverzeichnissen, sodass grep nicht in allen gewünschten Dateien sucht. Sie sollten die--include
Option verwenden, um grep anzuweisen, rekursiv nach Dateien zu suchen, die bestimmten Mustern entsprechen:grep -r x --include '*.scss' .
(Beachten Sie die Anführungszeichen, sie verhindern, dass das Muster von der Shell erweitert wird.) Oder verwenden Sie einfachfind
(siehe Robs Antwort).Unter Linux verwende ich diesen Befehl normalerweise, um rekursiv nach einem bestimmten Text in einem Verzeichnis zu suchen
wo,
r = rekursiv, dh Unterverzeichnisse im aktuellen Verzeichnis suchen
n =, um die Zeilennummern zu drucken, um stdout
i = Suche ohne Berücksichtigung der Groß- und Kleinschreibung
quelle
Verwenden Sie find. Im Ernst, es ist der beste Weg, denn dann können Sie wirklich sehen, mit welchen Dateien es arbeitet:
Beachten Sie, dass -H mac-spezifisch ist und den Dateinamen in den Ergebnissen anzeigt.
quelle
xargs
anstatt-exec
dies wird viel schneller, weil-exec
Spawns für jeden grep einen neuen Prozess, und der Overhead signifikant wird mit einer großen Anzahl von Dateien. Standardwarnungen zu Leerzeichen in Dateinamen gelten fürxargs
.xargs
Syntax.find . -iname "*.sql" -print0 | xargs -0 grep "slow"
Verwenden Sie grep with, um in allen Unterverzeichnissen zu suchen, jedoch nur in bestimmten Dateitypen
--include
.Beispiel: Rekursives Suchen im aktuellen Verzeichnis nach Text in * .yml und * .yaml:
quelle
Wenn Sie mehrere Befehle ausführen möchten, können Sie Folgendes verwenden:
quelle