Ich habe Dateien Dateiname_1 , Dateiname_2 ... Dateiname_100000, wobei die Dateinamen fortlaufend nummeriert sind. Wie kann ich Indexdateien löschen, die größer als beispielsweise 100 sind ?
command-line
teaLeef
quelle
quelle
{x..y}
auf die gesamte Liste erweitert. Wenn Sieecho test{1..3}
es beispielsweise verwenden , wird es erweitertecho test1 test2 test3
und dann ausgeführt. Wie Sie sehen können, wird gedruckttest1 test2 test3
. Wenn das{x..y}
nicht mit einem Argument verbunden ist, werden nur die Zahlen dort abgelegt. ZBecho test {1..3}
wird nur gedruckttest 1 2 3
.exec
Aufruf wird die Anzahl der Argumente, die ein Prozess haben kann, begrenzt. Sie können es mit abrufengetconf ARG_MAX
. Zum Beispiel auf meinem System sind es2097152
(~ 2,1 Millionen). Dies bedeutet, dassrm
(was nicht integriert ist) mit mehr als so vielen Dateien fehlschlägt. Integrierte Befehle haben dieses Problem nicht und die anderen vorgeschlagenen Lösungen auch nicht.Sie können diesen Befehl auch versuchen,
Alle Dateien (im Bereich von 100 bis 100000) werden gelöscht, wenn der Dateiname Zahlen in einer sequentiellen Reihenfolge enthält.
quelle
Im Allgemeinen haben Sie mehrere Möglichkeiten, dies zu erreichen:
wird von der Shell auf rund 100.000 Dateinamen erweitert. Wenn der Basisname ein langer Pfad ist und die Anzahl hoch genug ist, können Sie mit diesem Ansatz möglicherweise die maximale Länge einer Befehlszeile überschreiten.
Die
for
Schleifeleidet nicht unter diesem Problem, ist jedoch eine relativ langsame Methode zum Löschen der Dateien, da die Shell die Variablensubstitution durchführen und rm etwa 100.000 Mal starten muss.
Beide oben genannten Methoden können Warnungen auslösen, wenn beispielsweise einige der Dateien
filename_101
fehlen.Normalerweise Lösungen auf Basis
find
sind besser, da sie nur die Arbeit an Dateien , die tatsächlich gibt es (bei Entdeckung). Es gibt jedoch einige subtile Unterschiede:wird immer noch das Start -
rm
Programm über 100.000 Mal, während der endgültigen ersetzt\;
durch+
versuchen , die Anzahl der Teilprozesse zu minimieren. Beide Methoden sind wahrscheinlich (viel oder ein bisschen) langsamer als die Verwendung, bei-delete
der überhaupt keine externen Befehle verwendet werden, sondern stattdessen Systemaufrufe aufgerufen werden.Überprüfen Sie jedoch immer zuerst, ob das Muster tatsächlich mit den Dateien übereinstimmt, auf die Sie abzielen möchten:
In diesem Fall würden Sie also eine Datei löschen, die Sie behalten möchten, und die Dateien belassen, die entfernt werden sollten.
quelle
Verwenden Sie den folgenden Befehl:
Dadurch werden Dateien von 100 bis 100000 gelöscht.
Weitere Informationen: Site
quelle
+
als\;
- siehe hier . Oder, noch besser, verwenden Sie den-delete
Befehl find .[100-100000]
Zeichenklasse stimmt nur mit einem einzelnen Zeichen überein, daher kann sie nur mit 0 oder 1