Wie entferne ich viele Dateien mit ähnlichen Namen?

Wie entferne ich viele Dateien mit ähnlichen Namen?

Ich habe viele txt-Dateien mit Namen wie „ file1.txt file2.txt file3.txt ... file1000.txt Wie kann ich alle diese Dateien löschen?“. Ich bin neu bei Unix und habe Angst, versehentlich andere Dateien in meinem Verzeichnis zu löschen.

Ich habe mir andere Fragen angesehen, bin mir aber nicht sicher, ob ich etwas tun könnte wie

rm -v !("differentfile"|"anotherfile"|"otherfile"|"finalfile") 

und deshalb alle meine Dateien mit demselben Namen und nur unterschiedlichen Nummern löschen und die wenigen behalten, die ich haben möchte? Und diese Zeile sollte nur Dateien in meinem Arbeitsverzeichnis/-ordner löschen, richtig?

Gibt es eine Möglichkeit, rm zu verwenden und dabei nur die Dateien auszuwählen, die ich alle auf einmal löschen möchte?

Antwort1

rm file*.txtentfernt alle Dateien im aktuellen Verzeichnis, deren Namen mit der Zeichenfolge beginnen fileund mit der Zeichenfolge enden .txt.

Wenn es gibtvieledavon erhalten Sie die Fehlermeldung "Argumentliste zu lang". In diesem Fall können Sie

find . -maxdepth 1 -name 'file*.txt' -delete

stattdessen.

Dadurch wird der Befehl verwendet, findum alle Dateien mit übereinstimmendem Namen file*.txtim aktuellen Verzeichnis zu finden und zu löschen. Die -maxdepth 1Option verhindert finddas Betreten anderer Unterverzeichnisse als .(dem aktuellen Verzeichnis).

Der Befehl macht keinen Unterschied zwischen Dateien und Verzeichnissen (genauso wie rm file*.txtes auch nicht der Fall wäre). Wenn Sie sicherstellen möchten, dass nur normale Dateien gelöscht werden, verwenden Sie

find . -maxdepth 1 -type f -name 'file*.txt' -delete

Für findImplementierungen, die nicht über die nicht standardmäßigen -deleteund/oder -maxdepthOptionen verfügen, verwenden Sie

find . ! -path . -prune -type f -name 'file*.txt' -exec rm -f {} +

Oder Sie greifen einfach auf eine einfache, aber langsame Schleife zurück:

for name in file*.txt; do
    rm -f "$name"
done

Antwort2

Wenn keine anderen Dateien mit der gleichen Struktur vorhanden sind, verwenden Sie das sogenannte Globbing mit dem Präfix „file“. Ein Asterisk bedeutet eine beliebige andere Zeichenfolge (einschließlich einer leeren Zeichenfolge). Prüfen Sie zuerst mit „ls“ (Liste) statt „rm“:

ls file*.txt

Sie können dies auch auf mindestens eine einzelne Zahl nach „Datei“ und alles andere danach eingrenzen:

ls file[[:digit:]]*.txt

Antwort3

Wenn Sie nicht sicher sind, ob Ihr Muster andere Dateien enthält, können Sie beispielsweise Folgendes tun:

  • verschieben Sie sie in einen anderen (temporären) Ordner, mv PATTERNüberprüfen Sie die Dateiliste und wenn alles in Ordnung ist, entfernen Sie den temporären Ordner.

  • verwenden rm -i PATTERN. Sie müssen jede Entfernung manuell bestätigen.

  • vorher rmkönntest du ein „ ls PATTERNoder“ machen echo PATTERNund prüfen, ob die Liste in Ordnung ist.

verwandte Informationen