Entfernen Sie alle *.foo im Verzeichnisbaum

Entfernen Sie alle *.foo im Verzeichnisbaum

Wie entferne ich alle *.foo in einem Verzeichnisbaum?

rm -r *.foo

funktioniert nicht.

Ich könnte es mit einer Schleife versuchen, aber dazu wäre eine rekursive Erweiterung nötig:

for x in */*/.../*.foo
    do rm $x
done

Was auch nicht möglich ist.

Antwort1

Sie können Folgendes verwenden find:

find -name '*.foo' -delete

Antwort2

Angenommen, Sie haben eine relativ neue Version von Bash:

shopt -s globstar
rm -- **/*.foo

Antwort3

Sie können es mit „find“ versuchen:

find /dir/path -name *.foo -exec rm -f {} \;

Antwort4

Eine der einfachsten Lösungen wäre, den Befehl „find“ mit dem folgenden execParameter zu verwenden:

find /path/where/to/start/search -type f -name "*.foo" -exec rm {} \;

Dadurch werden alle Dateien mit dem Namen *.foo gesucht und für jede davon rm {filename} ausgeführt.

Wenn Sie viele Dateien haben, xargsist die Verwendung des Befehls möglicherweise schneller:

find /path/where/to/start/search -type f -name "*.foo" | xargs rm 

Dadurch werden alle Dateien gefunden und die Dateinamen hinter dem RM-Befehl eingefügt, bis die maximale Länge eines Befehls erreicht ist, die Ihre Distribution/Shell unterstützt. Beim Ausführen wird also Folgendes angezeigt:

rm dir1/file1.foo dir1/file2.foo dir1/file3.foo 

Wie Sie sich vorstellen können, muss die rmBinärdatei jetzt viel seltener gestartet werden, wodurch dies eine schnellere Option ist.

verwandte Informationen