Löschen bestimmter Dateien in der Befehlszeile

Löschen bestimmter Dateien in der Befehlszeile

Ich habe DateienDateiname_1,Dateiname_2...Dateiname_100000wobei die Dateinamen fortlaufend nummeriert sind. Wie kann ich die Dateien mit einem Index löschen, der größer ist als, sagen wir100?

Antwort1

Wenn die Dateinamen fortlaufend nummeriert sind, führen Sie einfach den folgenden Befehl aus:

rm fileName_{100..100000}

Antwort2

Sie können diesen Befehl auch versuchen,

for i in $(seq 100 100000); do rm fileName_$i; done

Es werden alle Dateien (Bereich von 100 bis 100000) gelöscht, wenn der Dateiname Zahlen in fortlaufender Reihenfolge enthält.

Antwort3

Grundsätzlich stehen Ihnen hierfür mehrere Möglichkeiten zur Verfügung:

rm fileName_{100..100000}

wird von der Shell in etwa 100.000 Dateinamen erweitert. Wenn der Basisname ein langer Pfad ist und die Zahl hoch genug ist, können Sie mit diesem Ansatz tatsächlich die maximale Länge einer Befehlszeile überschreiten.

Die forSchleife

for i in $(seq 100 100000); do rm fileName_$i; done

leidet nicht unter diesem Problem, ist aber eine relativ langsame Möglichkeit zum Löschen der Dateien, da die Shell die Variablenersetzung durchführen und rm etwa 100.000 Mal starten muss.

Beide oben genannten Methoden können Warnungen verursachen, wenn beispielsweise einige Dateien filename_101fehlen.

Normalerweise findsind Lösungen, die auf basieren, besser, da sie nur mit Dateien arbeiten, die tatsächlich vorhanden sind (während der Erkennung). Es gibt jedoch einige subtile Unterschiede:

find . -name 'fileName_[100-100000]' -exec rm {} \;

startet das rmProgramm trotzdem etwa 100.000 Mal, während das Ersetzen des finalen \;durch +versucht, die Anzahl der Unterprozesse zu minimieren. Beide Methoden sind wahrscheinlich (viel oder etwas) langsamer als die Verwendung von , -deletebei der überhaupt keine externen Befehle verwendet werden, sondern stattdessen Systemaufrufe aufgerufen werden.

Jedoch,stetsÜberprüfen Sie zunächst, ob das Muster tatsächlich mit den gewünschten Dateien übereinstimmt:

stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]' 
askubuntu/filename_1

In diesem Fall würden Sie also eine Datei löschen, die Sie behalten wollten, und die Dateien belassen, die entfernt werden sollten.

Antwort4

Verwenden Sie den folgenden Befehl:

find . -name 'fileName_[100-100000]' -exec rm {} \;

Dadurch werden 100 bis 100.000 Dateien gelöscht.

Mehr Informationen:Website

verwandte Informationen