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*.txt
entfernt alle Dateien im aktuellen Verzeichnis, deren Namen mit der Zeichenfolge beginnen file
und 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, find
um alle Dateien mit übereinstimmendem Namen file*.txt
im aktuellen Verzeichnis zu finden und zu löschen. Die -maxdepth 1
Option verhindert find
das Betreten anderer Unterverzeichnisse als .
(dem aktuellen Verzeichnis).
Der Befehl macht keinen Unterschied zwischen Dateien und Verzeichnissen (genauso wie rm file*.txt
es 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 find
Implementierungen, die nicht über die nicht standardmäßigen -delete
und/oder -maxdepth
Optionen 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
rm
könntest du ein „ls PATTERN
oder“ machenecho PATTERN
und prüfen, ob die Liste in Ordnung ist.