Das verwende ich in Fedora Core 12:
grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
Wenn Sie Dateien suchen und verschieben möchten, die nicht Ihrem Muster entsprechen (Dateien verschieben, die 'Subject \[SPAM\]'
nicht enthalten). in diesem Beispiel) verwenden Sie:
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR
Das -Z bedeutet Ausgabe mit Nullen (\0) nach den Dateinamen (Leerzeichen werden also nicht als Trennzeichen verwendet).
xargs -0
bedeutet \0 als Trennzeichen zu interpretieren.
Das -L bedeutet, Dateien zu finden, die nicht dem Muster entsprechen. Ersetzen Sie -L
mit -l
wenn Sie Dateien verschieben möchten, die Ihrem Muster entsprechen.
Dann
-I{} mv {} DIR
bedeutet {}
ersetzen mit den Dateinamen, so erhalten Sie mv filenames DIR
.
Folgendes hat mir geholfen:
grep -lir 'spam' ./ | xargs mv -t ../spam
Natürlich war ich bereits im erforderlichen Ordner (deshalb ./
) und in den benachbarten Ordner verschoben. Sie können sie jedoch in beliebige Pfade ändern.
Ich weiß nicht, warum die akzeptierte Antwort nicht funktioniert hat. Außerdem hatte ich keine Leerzeichen und Sonderzeichen in Dateinamen - vielleicht funktioniert das nicht.
Hier gestohlen:Grep-Befehl, um Dateien zu finden, die eine Textzeichenfolge enthalten, und sie zu verschieben
Diese Alternative funktioniert, wenn xargs nicht verfügbar ist:
grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done