Wie kann ich alle Dateien mit einer bestimmten Erweiterung in einem bestimmten Ordner löschen?

Wie kann ich alle Dateien mit einer bestimmten Erweiterung in einem bestimmten Ordner löschen?

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 .xvgDateien löschtBEFINDEN SICH IM ARBEITSVERZEICHNIS.

Antwort1

Ja, rm *.xvgwerdenurlö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 pwdBefehl verwenden, der Ihr aktuelles Verzeichnis anzeigt. Führen Sie anschließend einen aus, lsum zu überprüfen, ob Sie die erwarteten Dateien gefunden haben.

Wenn Sie Bedenken hinsichtlich der Eingabe des rmBefehls haben, können Sie zwei Dinge tun:

  1. Geben Sie ein ls *.xvg, um eine Liste der Dateien anzuzeigen, die von diesem Befehl betroffen wären.

  2. Sofern Sie keinevielvon Dateien können Sie immer auch den -iBefehlszeilenschalter for verwenden rm(gibt es auch für cpund mv). Bei Verwendung rm -i *.xvgwerden 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 *.xvgmit 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 arg3beim Start eine Liste von Argumenten lesen. Im Fall von rmwerden 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 *.barin 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 echovon , 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.barund übergibt diese dann an den rmBefehl.

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 **/*.barwird eine Liste aller Dateien angezeigt, die .barin 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)

verwandte Informationen