Entfernen Sie Dateien, die bestimmte Zeichen enthalten

Entfernen Sie Dateien, die bestimmte Zeichen enthalten

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 findBefehls.

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 -maxdepthPrimä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 -lbedeutet nur Dateinamen auflisten

[07]bedeutet entweder 0 oder 7

xargsmacht 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

verwandte Informationen