Verwenden Sie GREP, um Inhalte in Dateien zu finden und sie zu verschieben, wenn sie übereinstimmen

StackOverflow https://stackoverflow.com/questions/91899

  •  01-07-2019
  •  | 
  •  

Frage

Ich verwende Grep, um eine Liste von Dateien zu generieren, die ich verschieben muss:

grep -L -r 'Subject: \[SPAM\]' .

Wie kann ich diese Liste an den MV -Befehl übergeben und die Dateien woanders verschieben?

War es hilfreich?

Lösung

grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR

Der -Z bedeutet nach den Dateinamen mit Nullen ( 0) Ausgabe (so werden Leerzeichen nicht als Abgrenzer verwendet).

xargs -0

bedeutet interpretieren 0, um Grenzwerte zu sein.

Dann

-I{} mv {} DIR

bedeutet ersetzen {} Mit den Dateinamen, so dass Sie bekommen mv filenames DIR.

Andere Tipps

Diese Alternative funktioniert, wenn Xargs nicht verfügbar ist:

grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done

Das verwende ich in Fedora Core 12:

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR

Das hat mir geholfen:

grep -lir 'spam' ./ | xargs mv -t ../spam

Natürlich war ich bereits im erforderlichen Ordner (deshalb ./) und bewegte sie in den benachbarten Ordner. Aber Sie können sie auf alle Wege ändern.

Ich weiß nicht, warum die akzeptierte Antwort nicht funktioniert hat. Außerdem hatte ich keine Leerzeichen und Sonderzeichen in Dateinamen - vielleicht funktioniert dies nicht.

Hier gestohlen: GREP -Befehl, um Dateien zu finden, die eine Textzeichenfolge enthalten und verschieben

Vielleicht funktioniert das:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>

Angenommen, der von Ihnen geschriebene Grep gibt die von Ihnen erwarteten Dateienpfade zurück.

Es gibt verschiedene Möglichkeiten, aber hier ist eine langsame, aber fehlgeschlagene:

IFS=$'\n'; # set the field separator to line break
for $mail in $(grep -L -r 'Subject: \[SPAM\]' .); do mv "$mail" your_dir; done;
IFS=' '; # restore FS

Arbeit perfekt für mich:

  • Verschieben Sie Dateien, die den Text mit dem Wort mystringtoSearch enthalten, in das Verzeichnis mydir.

    finden . -Type f -exec grep -il 'mystringtoSearch' {} ; -exec mv {} mydir/ ;

ich hoffe das hilft

Sie können das Ergebnis an den nächsten Befehl übergeben, indem Sie Grep ... | xargs mv {} Ziel

Weitere Informationen finden Sie in Man Xargs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top