Ich möchte Dateien löschen, deren Größe zwischen bestimmten Werten liegt. Zum Beispiel habe ich die folgende Liste von Dateien:
-rw-r--r-- 1 smsc sys 558 Apr 30 13:07 stats.sfe.1.20120430130513.xml.Z
-rw-r--r-- 1 smsc sys 388 Apr 30 15:32 stats.sfe.1.20120430153013.xml.Z
-rw-r--r-- 1 smsc sys 386 Apr 30 15:36 stats.sfe.1.20120430153513.xml.Z
-rw-r--r-- 1 smsc sys 389 Apr 30 15:42 stats.sfe.1.20120430154013.xml.Z
-rw-r--r-- 1 smsc sys 390 Apr 30 16:02 stats.sfe.1.20120430160013.xml.Z
-rw-r--r-- 1 smsc sys 385 Apr 30 16:12 stats.sfe.1.20120430161013.xml.Z
Aus der obigen Liste möchte ich nur die Dateien löschen, deren Größe zwischen 386b und 390b variiert . Ich weiß, dass ich mit dem folgenden Befehl Dateien löschen kann, deren Größe bestimmte Werte überschreitet <size>
:
find . -size +<size>-delete
Aber wie kann ich eine weitere Grenze für Dateien hinzufügen, deren Größe unter einem bestimmten Wert liegt?
find
Die Bedingungen sind standardmäßig UND-verknüpft, setzen Sie also eine andere-size
Option für die andere Grenze auf.Antworten:
Ein Bereich ist einfach eine Obergrenze UND eine Untergrenze. Aus der
find
Spezifikation :Sie müssen also lediglich beide Größengrenzen vor der
-delete
Aktion angeben .quelle
Der
-a
in einem explizitenAND
Operator, mit dem Sie zwei Primaries verbinden können. In diesem Fall erstellen Sie einen Bereich mit-size
.find . -size +386b -a -size -390b -exec rm -f {} \;
Beachten Sie die Größe ein numerisches Argument ist , das optional mit vorangestellt werden kann
+
und-
. Vonman 1 find
:quelle
find
Bedingungen standardmäßig logisch UND verknüpft. Also habe ich noch einesize
Bedingung hinzugefügt und es hat gut funktioniert! Der letzte Befehl sieht aus wie:find . -maxdepth 1 -size +358c -size -395c -delete
Wann immer Sie
find
eine Zahl erwarten, können Sie ein+
Zeichen voranstellen, um mehr als diese Zahl-
zu bedeuten , oder ein Zeichen, um weniger als diese Zahl zu bedeuten. Dies sind strenge Ungleichungen:+3
und-7
bedeutet 4, 5 oder 6.Beim
-size
primären müssen Sie das Suffix hinzufügen,c
um anzugeben, dass die Anzahl eine Anzahl von Bytes ist. Sie können mehrere Primaries verketten, um deren Konjunktion zu übernehmen (in einigen Versionen können Sie-a
oder-and
zwischen ihnen einfügen). Somit:In zsh können Sie das
L
Glob-Qualifikationsmerkmal verwenden . Die Standardeinheit ist Bytes. wiefind
die Zeichen+
und-
zeigen strenge Ungleichungen an.(Der obige Befehl wird nicht in Unterverzeichnisse zurückgeführt. Wenn Sie dies benötigen, fügen Sie ihn
**/
vor dem Muster hinzu.)quelle
Ein Weg mit
perl
:quelle