grep unter Windows 7 Ungültiges Argument

778
Mike

Ich verwende grep von Gnuwin32 unter Windows.

Tun:

grep -r INSERT *.sql 

Erträge:

grep: *.sql: Invalid argument 

Irgendeine Idee warum?

1
Haben Sie gnuwin32 aktualisiert? Der Befehl scheint für mich korrekt zu funktionieren. Es gab einen älteren Fehler, der dieses Verhalten hatte. monkey vor 9 Jahren 0

3 Antworten auf die Frage

2
jan.supol

Weil es keine * .sql-Datei gibt.

Während dies tatsächlich zutrifft, ergibt das Hinzufügen von -r den gleichen Fehler. Mike vor 9 Jahren 0
@Mike bash erweitert `* .sql` auf alle Dateien / Verzeichnisse, die diesem Muster entsprechen. Da nichts übereinstimmt, erhalten Sie den Fehler. "-r" hat damit nichts zu tun fedorqui vor 9 Jahren 0
Entschuldigung, ich folge nicht. In dem Ordner, in dem ich den Befehl ausgeführt habe, befinden sich keine Dateien mit der Erweiterung .sql. Es gibt Unterordner, und diese _do_ haben tatsächlich Dateien mit der Erweiterung .sql. Sollte das "-r" dann nicht helfen? Mike vor 9 Jahren 0
[TECHIE007] (http://superuser.com/users/23133/%c6%ac%e1%b4%87c%ca%9c%ce%b9%e1%b4%87007) hat eine gute Antwort darauf. Völlig unabhängig von Ihrer Frage, vielleicht zum Spaß oder zum Vergleich, möchte ich einfach die Nicht-Gnuwin32-Lösung hinzufügen, die wahrscheinlich dasselbe bewirkt: `@for / f% i in ('dir / s / b *). sql ') do @ (tippe% i | suche "INSERT"> nul && wenn der Fehlerlevel 0 ist echo% i) `. jan.supol vor 9 Jahren 0
2
Ƭᴇcʜιᴇ007

Laut dem Grep-Handbuch :

-r Mit grep ist die rekursive Verzeichnissuche. Um sie zu verwenden, geben Sie das Startverzeichnis und keine Dateimaske an.

z.B:

grep -r INSERT .würde alle Dateien nach INSERT durchsuchen, beginnend mit dem aktuellen Verzeichnis ( .) und rekursiv durch die Unterordner.

Sie können die rekursive Ordnerprüfung und einen Platzhalter für Dateien angeben, um die Suche einzuschränken. Sie können die --includeOption verwenden:

grep -r --include "*.sql" INSERT .

Ähnliche Frage / Info über StackOverflow: Wie grep ich rekursiv?

Ich denke, ich muss mein grep aktualisieren. Ich habe keine --include-Option! Das macht aber sehr viel Sinn. Mike vor 9 Jahren 0
1
fedorqui

grepist ein großartiges Werkzeug mit einigen interessanten Parametern. (Jedoch, wie der Name schon sagt g suchen lobally ein r egular e xpression und p rint) für passende Dinge gemeint ist. Wenn Sie Dateien suchen möchten, verwenden Sie find.

In diesem Fall sieht es so aus, als würden Sie nach dem Text INSERTin den Dateien suchen, die sich in dieser Baumstruktur befinden.

Dazu müssen Sie Folgendes tun:

find -name "*.sql" grep -h INSERT {} \; 

find -name "*.sql"findet alle diese Dateien und grep -hdruckt dann diejenigen, die den Text enthalten INSERT.


Warum hat Ihr Ansatz nicht funktioniert?

Weil grep -r ... *.sqlbash versucht, das zu erweitern, *.sqlbevor der Befehl ausgeführt wird. Es stimmt jedoch nichts *.sqlin Ihrem Verzeichnis, daher kann es nicht funktionieren.

Sie können den --includeParameter mit einem regulären Ausdruck verwenden, aber meiner Erfahrung nach ist er ziemlich zerbrechlich.