Ja, rm *.xvg
löscht nur Dateien, die mit .xvg
Ihrem aktuellen Verzeichnis enden . Hier ist der Grund.
Wenn Sie einen Befehl wie diesen eingeben, wird die Arbeit zwischen der verwendeten Shell (nehmen wir bash an) und dem Befehl binary aufgeteilt.
Sie können die Binärdatei finden, indem Sie Folgendes eingeben which rm
. Dieses kleine Programm kümmert sich um das Aufheben der Verknüpfung von Dateien. Programme wie dieses können von der Kommandozeile aus gestartet werden und können prog arg1 arg2 arg3
beim Start eine Liste von Argumenten lesen . In diesem Fall rm
werden sie als Liste vollqualifizierter Dateinamen interpretiert, die gelöscht werden sollen. Wenn Sie sich also in einem Verzeichnis befinden, das die Datei enthält foo.bar
, führt die Eingabe delete 'foo.*'
zu rm: foo.*: No such file or directory
. Beachten Sie die einfachen Anführungszeichen um das Dateimuster. Sie weisen die Shell an, das Argument unverändert an die Shell zu übergeben.
Wenn Sie jedoch rm *.bar
dasselbe Verzeichnis eingeben, wird die Datei gelöscht. Was hier passiert, ist, dass Ihre Shell, dh das Programm, mit dem Sie Befehle eingeben, einige Transformationen ausführt, bevor die Argumente an den Befehl übergeben werden. Eine davon wird als "Dateinamenerweiterung" oder "Globbing" bezeichnet. Sie können eine Liste von bash Dateinamen - Erweiterungen finden Sie hier . Eine der häufigsten Erweiterungen ist *
die Erweiterung auf Dateinamen im aktuellen Verzeichnis.
Ein einfacher Weg, um Globs bei der Arbeit zu betrachten, ist die Verwendung echo
, die alle Argumente ausgibt , die ihr durch die Shell übergeben wurden. Wenn Sie also echo *
in dasselbe Verzeichnis tippen, wird dies ausgegeben foo.bar
. Wenn Sie also tippen rm *.bar
, geschieht tatsächlich, dass die Shell die Argumentliste auf erweitert foo.bar
und diese dann an den rm
Befehl übergibt .
Es gibt verschiedene Möglichkeiten, das Globbing zu steuern. In neueren Versionen von bash können Sie beispielsweise eine Option namens globstar aktivieren, die eine rekursive Erweiterung vornimmt. Tippenecho **/*.bar
wird eine Liste aller Dateien angezeigt, die .bar
in allen Unterordnern enden . rm **/*.bar
Wenn Sie also globstar-fähige Bash eingeben, werden in der Tat alle übereinstimmenden Dateien in den Unterordnern rekursiv gelöscht.
rm -f {*.xvg,.*.xvg}
um auch versteckte Dateien zu entfernen. Undrm -R -f {*.xvg,.*.xvg}
auch Verzeichnisse zu entfernen.