
Ich habe eine Liste von Dateien in einem Verzeichnis und muss alle Dateien entfernen, die entweder eine 0 oder eine 7 enthalten. Ich glaube, ich muss grep verwenden, bin mir aber nicht ganz sicher. Irgendwelche Ideen?
Antwort1
Sie möchten Ihre Dateien anhand eines bestimmten Bedingungstests auswerten und für jede Datei eine Aktion entsprechend dem Ergebnis des Bedingungstests ausführen. Genau das ist der Zweck des find
Befehls.
Hier ist ein tragbares (POSIX-kompatibel) Befehl zum Entfernen regulärer Dateien, deren Inhalt eine „0“ oder eine „7“ enthält:
find . -type f -exec grep -q '[07]' {} \; -exec rm {} +
Beachten Sie, dassDasrekursivdurchsucht das aktuelle Verzeichnis.
Wenn Sie das nicht möchten, können Sie prüfen, ob der -maxdepth
Primärserver verfügbar ist (in diesem Fall können Sie auch den Primärserver verwenden -delete
, da keiner von beiden von POSIX angegeben wird):
find . -maxdepth 1 -type f -exec grep -q '[07]' {} \; -delete
Oder Sie können die hier beschriebenen Techniken anwenden:
Antwort2
grep -l '[07]' DirToYourFiles/* | xargs rm -f
grep -l
bedeutet nur Dateinamen auflisten
[07]
bedeutet entweder 0 oder 7
xargs
macht sie zu einem Befehl.
Dies setzt voraus, dass Dateinamen keine Leerzeichen, Zeilenumbrüche, einfache oder doppelte Anführungszeichen oder Backslash-Zeichen enthalten. Mit GNU-Dienstprogrammen können Sie die Zuverlässigkeit erhöhen, indem Sie:
grep -lZ '[07]' DirToYourFiles/* | xargs -r0 rm -f