Wie entferne ich Dateien mit grep und rm?

8
%Vor%

grep: a.txt : Keine solche Datei oder Verzeichnis

grep: b : Keine solche Datei oder Verzeichnis

Der Befehl

entfernt alle im Verzeichnis vorhandenen Dateien außer., ... Es sollte nur die Dateien entfernen, die das Wort "magenta" enthalten.

Auch versucht grep magenta * -exec rm '{}' \; , aber kein Glück. Irgendeine Idee?

    
PRK 03.08.2015, 04:53
quelle

2 Antworten

12

Verwenden Sie xargs :

%Vor%

Der Zweck von xargs besteht darin, eine Eingabe in stdin zu nehmen und sie in die Befehlszeile seines Arguments einzufügen.

Was die Optionen tun:

  • Die Option -l weist grep an, den übereinstimmenden Text nicht zu drucken und stattdessen nur die Namen der Dateien auszudrucken, die übereinstimmenden Text enthalten.

  • Die Option --null weist grep an, die Dateinamen mit NUL-Zeichen zu trennen. Dies ermöglicht es, alle Manor des Dateinamens sicher zu behandeln.

  • Die -0 -Option für xargs, um ihre Eingabe als NUL-separiert zu behandeln.

John1024 03.08.2015, 04:59
quelle
3

Hier ist ein sicherer Weg:

%Vor%
  • -l druckt Dateinamen von Dateien, die dem Suchmuster entsprechen.
  • -r führt eine rekursive Suche nach dem Muster magenta im angegebenen Verzeichnis . durch. Wenn dies nicht funktioniert, versuchen Sie -R . (d. h. als mehrere Namen anstelle von einem).
  • xargs -0 füttert die Dateinamen von grep bis rm -f
  • -- wird oft vergessen, aber es ist sehr wichtig, das Ende von Optionen zu markieren und das Entfernen von Dateien zu erlauben, deren Namen mit - .
  • beginnen

Wenn Sie sehen möchten, welche Dateien gelöscht werden sollen, entfernen Sie einfach | xargs -0 rm -f -- part.

    
SriniV 03.08.2015 04:59
quelle

Tags und Links