Wenn ich das aktuelle/Arbeitsverzeichnis (indem ich mit dorthin navigiere cd
) auf ein bestimmtes Verzeichnis einstelle und dann Folgendes eingebe:
rm *.xvg
Was bewirkt dieser Befehl? Stimmt es, dass der obige BefehlnurLöschen von Dateien mit der Erweiterung.xvg
nurim Arbeitsverzeichnis?
Ich war nervös, dies auszuprobieren, bevor ich fragte, weil ich absolut sicher sein möchte, dass der obige Befehl nur .xvg
Dateien löschtBEFINDEN SICH IM ARBEITSVERZEICHNIS.
Antwort1
Ja, rm *.xvg
werdenurlöschen Sie die Dateien mit der angegebenen Erweiterung in IhremaktuellVerzeichnis.
AGutUm sicherzustellen, dass Sie sich tatsächlich in dem Verzeichnis befinden, in dem Sie Ihre Dateien löschen möchten, können Sie den pwd
Befehl verwenden, der Ihr aktuelles Verzeichnis anzeigt. Führen Sie anschließend einen aus, ls
um zu überprüfen, ob Sie die erwarteten Dateien gefunden haben.
Wenn Sie Bedenken hinsichtlich der Eingabe des rm
Befehls haben, können Sie zwei Dinge tun:
Geben Sie ein
ls *.xvg
, um eine Liste der Dateien anzuzeigen, die von diesem Befehl betroffen wären.Sofern Sie keinevielvon Dateien können Sie immer auch den
-i
Befehlszeilenschalter for verwendenrm
(gibt es auch fürcp
undmv
). Bei Verwendungrm -i *.xvg
werden Sie für jede einzelne Datei gefragt, ob sie gelöscht werden darf, sodass Sie sicher sein können, dass nichts Unerwartetes gelöscht wird. (Dies wird jedoch mühsam, wenn Sie viele Dateien haben :)
Antwort2
Sie müssen nicht zum Verzeichnis navigieren, verwenden Sie einfach
rm /some/dir/*.xvg
Für den Fall, dass Sie einen Tippfehler oder einen ähnlichen Fehler im Pfad haben, sodass /som/dir nicht existiert:
cd /som/dir
rm *.xvg
löscht versehentlich alle .xvg-Dateien im aktuellen Verzeichnis. Der erste Befehl löscht dies nicht und Sie müssen nicht erneut zurück wechseln.
Eine alternative Möglichkeit wäre die Verwendung von find:
find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete
Antwort3
Ja, es werden nur Dateien gelöscht, die in Ihrem aktuellen Verzeichnis rm *.xvg
mit enden . Hier ist der Grund..xvg
Wenn Sie einen Befehl wie diesen eingeben, wird die Arbeit zwischen der von Ihnen verwendeten Shell (nehmen wir an, Bash) und der Befehlsbinärdatei aufgeteilt.
Sie können die Binärdatei finden, indem Sie eingeben which rm
. Dieses kleine Programm kümmert sich um das Aufheben der Verknüpfung von Dateien. Programme wie dieses können von der Befehlszeile aus gestartet werden und können prog arg1 arg2 arg3
beim Start eine Liste von Argumenten lesen. Im Fall von rm
werden sie als Liste vollständig qualifizierter Dateinamen interpretiert, die gelöscht werden sollen. Wenn Sie sich also in einem Verzeichnis befinden, das die Datei enthält foo.bar
, wird durch die Eingabe delete 'foo.*'
von ein Ergebnis angezeigt rm: foo.*: No such file or directory
. Beachten Sie die einfachen Anführungszeichen um das Dateimuster. Sie weisen die Shell an, das Argument so wie es ist an die Shell weiterzugeben.
Wenn Sie jedoch rm *.bar
in dasselbe Verzeichnis tippen, wird die Datei gelöscht. Was hier passiert, ist, dass Ihre Shell, also das Programm, das Sie zum Eingeben von Befehlen verwenden, einige Transformationen durchführt, bevor sie die Argumente an den Befehl weitergibt. Eine davon heißt „Dateinamenerweiterung“, auch bekannt als „Globbing“. Sie können eine Liste der Bash-Dateinamenerweiterungen sehenHier. Eine der gebräuchlichsten Erweiterungen ist *
, das zu Dateinamen im aktuellen Verzeichnis erweitert wird.
Eine einfache Möglichkeit, sich Globs bei der Arbeit anzusehen, ist die Verwendung echo
von , das alle Argumente ausgibt, die ihm über die Shell übergeben wurden. Wenn Sie also echo *
in dasselbe Verzeichnis tippen, wird ausgegeben foo.bar
. Wenn Sie also tippen rm *.bar
, erweitert die Shell die Argumentliste auf foo.bar
und übergibt diese dann an den rm
Befehl.
Es gibt einige Möglichkeiten, das Globbing zu steuern. In neueren Versionen von Bash können Sie beispielsweise eine Option namens „globstar“ aktivieren, die eine rekursive Erweiterung durchführt. Wenn Sie „globstar“ eingeben, echo **/*.bar
wird eine Liste aller Dateien angezeigt, die .bar
in allen Unterordnern mit „globstar“ enden. Wenn Sie also rm **/*.bar
„globstar“ in Bash eingeben, werden tatsächlich alle übereinstimmenden Dateien in Unterordnern rekursiv gelöscht.
Antwort4
Befehl :
rm ./*.pgm
funktioniert bei mir
Befehl:
rm *.pgm
gibt Fehlerbefehl aus (auf Polnisch, übersetzt):
rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.
In
bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)