
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 exec
Parameter 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, xargs
ist 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 rm
Binärdatei jetzt viel seltener gestartet werden, wodurch dies eine schnellere Option ist.