
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 for
Schleife
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_101
fehlen.
Normalerweise find
sind 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 rm
Programm 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 , -delete
bei 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