GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So löschen Sie Dateien mit einer bestimmten Erweiterung in der Linux-Befehlszeile

Es kann vorkommen, dass Sie mehrere Dateien mit einer bestimmten Erweiterung entfernen möchten. Dieses Tutorial wird Ihnen dabei helfen, genau das zu tun.

Mit dem Befehl rm löschen Sie Dateien und Ordner folgendermaßen:

rm [option] filename

Es mag so aussehen, als müssten Sie hier die genauen Dateinamen kennen, aber das stimmt nicht.

Lassen Sie mich Ihnen ein paar Methoden zeigen, um mehrere Dateien basierend auf ihrer Dateierweiterung zu entfernen.

Methode 1:Entfernen Sie Dateien nach Erweiterung mit dem rm-Befehl

In meinem Beispiel habe ich eine Reihe von GIF-Dateien, die mit der Erweiterung .gif enden.

Um sie zu entfernen, kann ich den rm-Befehl wie folgt verwenden:

rm *.gif

Das blinde Entfernen von Dateien kann riskant sein. Es ist immer gut, zuerst mit dem Befehl ls zu sehen, welche Dateien gelöscht werden:

ls *.gif

So lösche ich die Dateien mit der Erweiterung .gif:

$ ls
1.gif  2.gif  3.gif  4.gif  a.jpg  b.png  c.webp

$ ls *.gif
1.gif  2.gif  3.gif  4.gif


$ rm -v *.gif
removed '1.gif'
removed '2.gif'
removed '3.gif'
removed '4.gif'

$ ls
a.jpg  b.png  c.webp

Dies kann für jede Dateierweiterung durchgeführt werden, nicht nur für .gif. Sie können sogar mehrere Erweiterungen kombinieren.

$ ls
f1.txt  f2.txt  f3.txt  f4.txt  not-txt-file.pdf random.txt


$ rm -v *.txt *.pdf
removed 'f1.txt'
removed 'f2.txt'
removed 'f3.txt'
removed 'f4.txt'
removed 'not-txt-file.pdf'

$ ls
random.txt
💡Sie können die interaktive Option -i mit dem Befehl rm verwenden, der vor dem Löschen jeder Datei zur Bestätigung auffordert. Dies ist jedoch möglicherweise nicht praktisch, wenn Sie zahlreiche Dateien löschen müssen.

Sie fragen sich, wie es funktioniert? Platzhalter!

Kurz gesagt, ein Platzhalter ist ein Sonderzeichen, das Sie verwenden, um ein bestimmtes Muster zu finden. Nachfolgend finden Sie einige häufig verwendete Platzhalter:

Wilcard Verwenden
* Übereinstimmung mit einem oder mehreren Vorkommen
? Übereinstimmung mit einem einzelnen Vorkommen
[] (Eckige Klammern) Geben Sie einen Bereich für den Abgleich an
^ Vom Abgleich ausschließen

Sie haben hier den Platzhalter * verwendet, was bedeutet, dass er mit einem oder mehreren Vorkommen eines beliebigen Zeichens übereinstimmen kann.

Wenn Sie *.gif sagen , es bedeutet jede Kombination von Buchstaben, die zu .gif führt . Mit anderen Worten, es gibt Ihnen alle Dateien mit der Erweiterung .gif .

Jeder Platzhalter kann zusätzlich zu einem weiteren Platzhalter verwendet werden. Aber lassen Sie uns jetzt nicht auf diese Details eingehen.

Der Punkt zwischen * und Extension ist wichtig!

Viele Leute begehen den Fehler, *.gif zu verwechseln mit *gif . Das ist nicht richtig. Entscheidend ist der Punkt (.) zwischen * und Erweiterungsname.

Nehmen Sie das Szenario mit den folgenden Dateien und schauen Sie, was passiert, wenn ich den Regex *gif verwende statt *.gif :

$ ls

1.gif  2.gif  3.gif  4.gif  definately-not-a-gif  jpg-not-gif  not-a-gif


$ rm -v *gif

removed '1.gif'
removed '2.gif'
removed '3.gif'
removed '4.gif'
removed 'definately-not-a-gif'
removed 'jpg-not-gif'
removed 'not-a-gif'

Es löschte auch Dateien mit der Zeichenfolge gif darin, obwohl es nicht die Dateierweiterung war, hatte es einfach gif am Ende des Dateinamens ohne den vorangestellten Punkt.

Achten Sie beim Entfernen von Dateien mit Platzhaltern oder regulären Ausdrücken darauf, dass Sie so genau wie möglich sind.

Methode 2:Dateien mit einer bestimmten Erweiterung rekursiv mit dem find-Befehl löschen

Der Befehl rm löscht nur die Dateien im aktuellen Verzeichnis. Es löscht keine Dateien aus den Unterverzeichnissen, auch nicht mit der rekursiven Option.

Um Dateien mit einer bestimmten Erweiterung rekursiv zu löschen, können Sie den Befehl find und den Befehl rm kombinieren:

Hier ist ein Beispiel, wo ich auch .gif-Dateien in den Unterverzeichnissen habe.

$ ls *
file_0.gif  file_z.txt  not-a-gif  not-a-txt

dir1:
file_1.gif  file_a.txt  not-a-gif  not-a-txt

dir2:
file_2.gif  file_b.txt  not-a-gif  not-a-txt

dir3:
file_3.gif  file_c.txt  not-a-gif  not-a-txt

dir4:
file_4.gif  file_d.txt  not-a-gif  not-a-txt

Um die Dateien zu löschen, können Sie den Find-Befehl wie folgt verwenden:

find . -type f -name "*.gif" -exec rm -v {} \;

Hier ist die Ausgabe, als ich den Befehl ausführte:

$ find . -type f -name "*.gif" -exec rm -v {} \;
removed './dir1/file_1.gif'
removed './dir3/file_3.gif'
removed './dir2/file_2.gif'
removed './file_0.gif'
removed './dir4/file_4.gif

Lass es uns aufschlüsseln.

  • Der Punkt nach "find" bedeutet, im aktuellen Verzeichnis zu suchen
  • Das "-name"-Flag gibt den Namen der Datei an, in der wir Regex verwenden können
  • Das "-exec"-Flag wird verwendet, um einen Bash-Befehl auf das Ergebnis des Find-Befehls auszuführen
  • Die geschweiften Klammern "{}" fungieren als Platzhalter für das Ergebnis der übereinstimmenden Datei(en), sodass "rm -v {}" die Dateien löscht, die der Suchbefehl gefunden hat.
  • Schließlich beendet das Semikolon den von Ihrer Shell ausgeführten Befehl (der Befehl nach exec) und der umgekehrte Schrägstrich '\' wird verwendet, damit das Semikolon richtig maskiert wird. Sie sollten sich darüber keine Sorgen machen.

Weitere Beispiele für den find-Befehl finden Sie im folgenden Tutorial.

Bonus-Tipp für Fortgeschrittene:Verwenden Sie den find-Befehl, um Dateien mit mehreren Erweiterungen zu bearbeiten

Der oben gezeigte Befehl deckt nicht das Auffinden von Dateien mit mehreren Erweiterungen ab, etwa "rm *.gif *.txt"

Um dies zu erreichen, können Sie das -o verwenden Argument, das "logischer ODER-Operator" bedeutet. Aber wir müssen auch den Backslash '\' verwenden, um den Klammern zu entkommen

$ ls *
file_0.gif  file_z.txt  not-a-gif  not-a-txt

dir1:
file_1.gif  file_a.txt  not-a-gif  not-a-txt

dir2:
file_2.gif  file_b.txt  not-a-gif  not-a-txt

dir3:
file_3.gif  file_c.txt  not-a-gif  not-a-txt

dir4:
file_4.gif  file_d.txt  not-a-gif  not-a-txt

$ find . \( -name "*.gif" -o -name "*.txt" \) -exec rm -v {} \;
removed './dir1/file_1.gif'
removed './dir1/file_a.txt'
removed './dir3/file_3.gif'
removed './dir3/file_c.txt'
removed './dir2/file_2.gif'
removed './dir2/file_b.txt'
removed './file_0.gif'
removed './file_z.txt'
removed './dir4/file_d.txt'
removed './dir4/file_4.gif'

Hier können Sie sehen, dass alle Dateien mit der Erweiterung „txt“ und Dateien mit der Erweiterung „gif“ rekursiv entfernt werden.

Ich weiß, dass es einfacher sein wird, den Find-Befehl für jeden Dateierweiterungstyp separat zu verwenden, und da liegen Sie nicht falsch.

Schlussfolgerung

Dieser Artikel behandelte das Entfernen von Dateien mit einer bestimmten Erweiterung. Wir haben auch versucht, diese Dateien rekursiv zu finden und zu entfernen.

"Mit großer Kraft kommt große Verantwortung" , denken Sie daran, wenn Sie Wildcards und Regex verwenden. Ein Tippfehler und wichtige Dateien könnten unbeabsichtigt gelöscht werden.


Linux
  1. So löschen Sie RIESIGE (100-200 GB) Dateien in Linux

  2. So benennen Sie Dateien unter Linux um

  3. So löschen Sie Dateien und Verzeichnisse in Linux über die Befehlszeile

  4. So finden Sie Dateien mit dem fd-Befehl in Linux

  5. Wie ersetze ich eine Datei im JAR durch die Befehlszeile in Linux?

So finden Sie Dateien mit dem fd-Befehl in Linux

So laden Sie Dateien mit dem Curl-Befehl unter Linux herunter

So laden Sie Dateien mit dem Wget-Befehl unter Linux herunter

So überprüfen Sie die Betriebssystemversion mit der Linux-Befehlszeile

So installieren Sie Dig unter Linux mit Befehlszeilenbeispielen

So entfernen/löschen Sie Dateien in Linux mit dem Befehl rm